Skip to main content

Request Logger

RequestLogger logs request and response details after the handler chain completes.

Quick start

app.Use(middleware.RequestLogger())

Zinc also exposes Logger() and LoggerWithConfig(...) as aliases.

Default fields

With the default config, Zinc logs:

  • latency
  • method
  • URI
  • status
  • error
  • remote IP
  • host
  • user agent
  • request ID
  • content length
  • response size

Config fields

FieldMeaning
SkipperSkip logging for selected requests
BeforeNextFuncHook that runs before the rest of the chain
LogValuesFuncReceive extracted values and emit logs yourself
HandleErrorRoute returned errors through Zinc before logging
LoggerCustom slog.Logger for the default logger
LogLatencyInclude request duration
LogMethodInclude request method
LogURIInclude request URI
LogRoutePathInclude matched route path
LogStatusInclude response status
LogErrorInclude request error
LogRemoteIPInclude remote IP
LogHostInclude host
LogUserAgentInclude user agent
LogRequestIDInclude request ID
LogContentLengthInclude request body size from headers
LogResponseSizeInclude response bytes written
LogHeadersCapture selected request headers
LogQueryParamsCapture selected query parameters

Custom logger example

app.Use(middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{
LogRoutePath: true,
LogHeaders: []string{"X-Request-ID", "X-Forwarded-For"},
LogValuesFunc: func(c *zinc.Context, v middleware.RequestLoggerValues) error {
slog.Info("http",
"method", v.Method,
"route", v.RoutePath,
"status", v.Status,
"latency", v.Latency,
)
return nil
},
}))

When to use BeforeNextFunc

Use it when you need to stamp context, start tracing spans, or derive correlation values before the rest of the middleware stack runs.