package webmiddleware import ( "bytes" "io" "net/http" "time" webutils "git.mstar.dev/mstar/goutils/http" "github.com/rs/zerolog/hlog" ) func TraceRequestInfoMiddleware(h http.Handler) http.Handler { return webutils.ChainMiddlewares( h, hlog.AccessHandler(func(r *http.Request, status, size int, duration time.Duration) { body, _ := io.ReadAll(r.Body) r.Body = io.NopCloser(bytes.NewReader(body)) hlog.FromRequest(r).Trace().Any("headers", r.Header). Bytes("body", body). Str("method", r.Method). Stringer("url", r.URL). Int("status", status). Int("size", size). Dur("duration", duration) }), ) }