Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package orusapi
import (
"net/http"
"time"
"github.com/justinas/alice"
"github.com/rs/zerolog"
"github.com/rs/zerolog/hlog"
)
// LogStack ...
func LogStack(log zerolog.Logger, status4XXLogLevel zerolog.Level) []alice.Constructor {
return []alice.Constructor{
hlog.NewHandler(log),
CatchPanics,
hlog.RemoteAddrHandler("ip"),
hlog.UserAgentHandler("user_agent"),
hlog.RefererHandler("referer"),
hlog.RequestIDHandler("req_id", "Request-Id"),
hlog.AccessHandler(func(r *http.Request, status, size int, duration time.Duration) {
log := hlog.FromRequest(r)
var event *zerolog.Event
if status >= http.StatusInternalServerError {
event = log.Error()
} else if status >= http.StatusBadRequest {
event = log.WithLevel(status4XXLogLevel)
} else {
event = log.Info()
}
event.
Dict("request", zerolog.Dict().
Str("method", r.Method).
Str("url", r.URL.String())).
Int("status", status).
Int("size", size).
Dur("duration", duration).
Msg(http.StatusText(status))
}),
}
}