From 15887d9d2e480aa7d511a560904929a05a8682ec Mon Sep 17 00:00:00 2001 From: mstar Date: Fri, 11 Apr 2025 10:44:50 +0200 Subject: [PATCH] Add builder for Logging middleware Builder offers option to add extra fields to log messages --- http/zerolog.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/http/zerolog.go b/http/zerolog.go index 10b2cd2..61cec54 100644 --- a/http/zerolog.go +++ b/http/zerolog.go @@ -9,6 +9,33 @@ import ( "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 { return ChainMiddlewares(handler, hlog.NewHandler(log.Logger),