linstrom/web/public/middleware/traceRequestInfo.go
mStar 26cabc02f6
All checks were successful
/ docker (push) Successful in 4m19s
Modify trace logging for more info
2025-05-12 15:27:08 +02:00

40 lines
930 B
Go

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) {
if !hlog.FromRequest(r).Trace().Enabled() {
return
}
body, _ := io.ReadAll(r.Body)
r.Body = io.NopCloser(bytes.NewReader(body))
IPAddress := r.Header.Get("X-Real-Ip")
if IPAddress == "" {
IPAddress = r.Header.Get("X-Forwarded-For")
}
if IPAddress == "" {
IPAddress = r.RemoteAddr
}
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).
Str("real-ip", IPAddress).
Dur("duration", duration).
Send()
}),
)
}