package middleware import ( "time" "github.com/gofiber/fiber/v2" "github.com/rs/zerolog" ) // Logging provides structured request logging via zerolog func Logging(logger zerolog.Logger) fiber.Handler { return func(c *fiber.Ctx) error { start := time.Now() err := c.Next() duration := time.Since(start) status := c.Response().StatusCode() event := logger.Info() if status >= 500 { event = logger.Error() } else if status >= 400 { event = logger.Warn() } event. Str("method", c.Method()). Str("path", c.Path()). Int("status", status). Dur("duration", duration). Str("requestId", GetRequestID(c)). Str("ip", c.IP()). Str("userAgent", c.Get("User-Agent")). Msg("request") return err } }