Add builder for Logging middleware

Builder offers option to add extra fields to log messages
This commit is contained in:
Melody Becker 2025-04-11 10:44:50 +02:00
parent e8aa16622b
commit 15887d9d2e
Signed by: mstar
SSH key fingerprint: SHA256:9VAo09aaVNTWKzPW7Hq2LW+ox9OdwmTSHRoD4mlz1yI

View file

@ -9,6 +9,33 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
func BuildLoggingMiddleware(extras map[string]string) HandlerBuilder {
return func(h http.Handler) http.Handler {
return ChainMiddlewares(h,
hlog.NewHandler(log.Logger),
hlog.AccessHandler(func(r *http.Request, status, size int, duration time.Duration) {
if strings.HasPrefix(r.URL.Path, "/assets") {
return
}
logger := hlog.FromRequest(r).Info().
Str("method", r.Method).
Stringer("url", r.URL).
Int("status", status).
Int("size", size).
Dur("duration", duration)
for k, v := range extras {
logger = logger.Str(k, v)
}
logger.Send()
}),
hlog.RemoteAddrHandler("ip"),
hlog.UserAgentHandler("user_agent"),
hlog.RefererHandler("referer"),
hlog.RequestIDHandler("req_id", "Request-Id"),
)
}
}
func LoggingMiddleware(handler http.Handler) http.Handler { func LoggingMiddleware(handler http.Handler) http.Handler {
return ChainMiddlewares(handler, return ChainMiddlewares(handler,
hlog.NewHandler(log.Logger), hlog.NewHandler(log.Logger),