/
logreq.go
32 lines (28 loc) 路 981 Bytes
/
logreq.go
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
// Package logreq contains middleware for HTTP requests logging using "zap" package.
package logreq
import (
"net/http"
"strings"
"github.com/felixge/httpsnoop"
"github.com/gorilla/mux"
"github.com/tarampampam/webhook-tester/internal/pkg/realip"
"go.uber.org/zap"
)
// New creates mux.MiddlewareFunc for HTTP requests logging using "zap" package.
func New(log *zap.Logger) mux.MiddlewareFunc {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
metrics := httpsnoop.CaptureMetrics(next, w, r)
if !strings.Contains(strings.ToLower(r.UserAgent()), "healthcheck") {
log.Info("HTTP request processed",
zap.String("remote addr", realip.FromHTTPRequest(r)),
zap.String("useragent", r.UserAgent()),
zap.String("method", r.Method),
zap.String("url", r.URL.String()),
zap.Int("status code", metrics.Code),
zap.Duration("duration", metrics.Duration),
)
}
})
}
}