grim/goserve
Clone
Summary
Browse
Changes
Graph
Implement combined log format instead of common (adds referer and user-agent)
draft
2020-01-04, Gary Kramlich
a6d5d0476d60
Implement combined log format instead of common (adds referer and user-agent)
package
main
import
(
"fmt"
"net/http"
"strings"
"time"
)
func
basicHandler
(
h
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
rw
:=
&
responseWriter
{
w
:
w
}
defer
func
()
{
// implement the NCSA Combined Log Format
// http://publib.boulder.ibm.com/tividd/td/ITWSA/ITWSA_info45/en_US/HTML/guide/c-logs.html#combined
addr
:=
r
.
RemoteAddr
// we use LastIndex so we can parse IPv6 addresses
if
idx
:=
strings
.
LastIndex
(
addr
,
":"
);
idx
!=
-
1
{
addr
=
addr
[:
idx
]
}
username
:=
"-"
if
user
,
_
,
ok
:=
r
.
BasicAuth
();
ok
&&
username
!=
""
{
username
=
user
}
referer
:=
r
.
Referer
()
if
referer
==
""
{
referer
=
"-"
}
userAgent
:=
r
.
UserAgent
()
if
userAgent
==
""
{
userAgent
=
"-"
}
fmt
.
Printf
(
"%s - %s [%s] \"%s %s %s\" %d %d %q %q\n"
,
addr
,
username
,
time
.
Now
().
Format
(
"02/Jan/2006:15:04:05 -0700"
),
r
.
Method
,
r
.
URL
.
Path
,
r
.
Proto
,
rw
.
StatusCode
(),
rw
.
Written
(),
referer
,
userAgent
,
)
}()
h
.
ServeHTTP
(
rw
,
r
)
})
}