Monorepo for Tangled forked from tangled.org/core
Something went wrong. Try again.
898 B · 40 lines
Go
1234567891011121314151617181920212223242526272829303132333435363738394041package middleware
import ( "log/slog" "net/http" "time"
"tangled.org/core/log")
func RequestLogger(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() l := log.FromContext(ctx)
start := time.Now()
next.ServeHTTP(w, r)
// Build query params as slog.Attrs for the group queryParams := r.URL.Query() queryAttrs := make([]any, 0, len(queryParams)) for key, values := range queryParams { if len(values) == 1 { queryAttrs = append(queryAttrs, slog.String(key, values[0])) } else { queryAttrs = append(queryAttrs, slog.Any(key, values)) } }
l.LogAttrs(ctx, slog.LevelInfo, "", slog.Group("request", slog.String("method", r.Method), slog.String("path", r.URL.Path), slog.Group("query", queryAttrs...), slog.Duration("duration", time.Since(start)), ), ) })}