Help us shape the future of Go! Take the 2026 Go Developer Survey

logger

package
v3.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 14, 2026 License: MIT Imports: 18 Imported by: 116

Documentation

Index

Constants

View Source
const (
	// Fiber's default logger
	DefaultFormat = "[${time}] ${ip} ${status} - ${latency} ${method} ${path} ${error}\n"
	// Apache Common Log Format (CLF)
	CommonFormat = "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent}\n"
	// Apache Combined Log Format
	CombinedFormat = "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent} \"${referer}\" \"${ua}\"\n"
	// JSON log formats
	JSONFormat = "" /* 133-byte string literal not displayed */
	// Elastic Common Schema (ECS) Log Format
	ECSFormat = "" /* 373-byte string literal not displayed */
)
View Source
const (
	TagPid               = "pid"
	TagTime              = "time"
	TagReferer           = "referer"
	TagProtocol          = "protocol"
	TagScheme            = "scheme"
	TagPort              = "port"
	TagIP                = "ip"
	TagIPs               = "ips"
	TagHost              = "host"
	TagMethod            = "method"
	TagPath              = "path"
	TagURL               = "url"
	TagUA                = "ua"
	TagLatency           = "latency"
	TagStatus            = "status"
	TagResBody           = "resBody"
	TagReqHeaders        = "reqHeaders"
	TagQueryStringParams = "queryParams"
	TagBody              = "body"
	TagBytesSent         = "bytesSent"
	TagBytesReceived     = "bytesReceived"
	TagRoute             = "route"
	TagError             = "error"
	TagReqHeader         = "reqHeader:"
	TagRespHeader        = "respHeader:"
	TagLocals            = "locals:"
	TagQuery             = "query:"
	TagForm              = "form:"
	TagCookie            = "cookie:"
	TagBlack             = "black"
	TagRed               = "red"
	TagGreen             = "green"
	TagYellow            = "yellow"
	TagBlue              = "blue"
	TagMagenta           = "magenta"
	TagCyan              = "cyan"
	TagWhite             = "white"
	TagReset             = "reset"
)

Logger variables

Variables

View Source
var ConfigDefault = Config{
	Next:              nil,
	Skip:              nil,
	Done:              nil,
	Format:            DefaultFormat,
	TimeFormat:        "15:04:05",
	TimeZone:          "Local",
	TimeInterval:      500 * time.Millisecond,
	Stream:            os.Stdout,
	BeforeHandlerFunc: beforeHandlerFunc,
	LoggerFunc:        defaultLoggerInstance,
	// contains filtered or unexported fields
}

ConfigDefault is the default config

View Source
var ErrTagInvalid = errors.New("logger: tag name and function are required")

ErrTagInvalid is returned by RegisterTag and panicked from MustRegisterTag when the supplied tag name or renderer is empty.

View Source
var ErrUnknownTag = errors.New("logger: unknown template tag")

ErrUnknownTag indicates that the logger middleware was configured with a format that references a tag with no registered renderer.

Functions

func LoggerToWriter

func LoggerToWriter[T any](logger fiberlog.AllLogger[T], level fiberlog.Level) io.Writer

LoggerToWriter is a helper function that returns an io.Writer that writes to a custom logger. You can integrate 3rd party loggers such as zerolog, logrus, etc. to logger middleware using this function.

Valid levels: fiberlog.LevelInfo, fiberlog.LevelTrace, fiberlog.LevelWarn, fiberlog.LevelDebug, fiberlog.LevelError

func MustRegisterTag added in v3.3.0

func MustRegisterTag(tag string, fn LogFunc)

MustRegisterTag registers a global logger middleware tag and panics on failure.

func New

func New(config ...Config) fiber.Handler

New creates a new middleware handler

func RegisterContextTag added in v3.3.0

func RegisterContextTag(name string, extract func(ctx any) string)

RegisterContextTag registers a string-valued tag in both the logger middleware tag registry and the package-level fiberlog context tag registry, so that the same name can be used in a logger.Config.Format and in fiberlog.SetContextTemplate. extract receives the raw context value (fiber.Ctx, *fasthttp.RequestCtx, or context.Context) and returns the rendered string; an empty return renders nothing.

Re-registering a name replaces both renderers. Panics if name is empty or extract is nil — registration is expected at init time.

func RegisterTag added in v3.3.0

func RegisterTag(tag string, fn LogFunc) error

RegisterTag registers a global logger middleware tag. Registered tags are available to logger middleware instances created after registration and can be overridden per instance with Config.CustomTags. Re-registering a tag replaces the existing tag function.

func SanitizeValue added in v3.5.0

func SanitizeValue(s string) string

SanitizeValue returns s with ASCII control bytes replaced by spaces, preserving horizontal tab. It is the same scrubbing the built-in tags apply to request-derived values, exported so that code taking one of the paths that bypasses those tags can apply it too:

  • a tag registered with RegisterTag, MustRegisterTag or RegisterContextTag
  • an entry in Config.CustomTags
  • a Config.LoggerFunc, which replaces the whole rendering pipeline

Any of those can write a value that reached the handler percent-decoded — a query parameter, a form field, a header — and an unscrubbed CR/LF there forges an extra access-log line.

Clean input, the overwhelmingly common case, is returned unchanged with no allocation. Only ASCII controls are replaced; bytes at or above 0x80 pass through, so a value that may carry C1 controls (U+0080–U+009F, including NEL U+0085) needs its own handling.

Types

type Buffer

type Buffer = logtemplate.Buffer

Buffer abstracts the buffer operations used when rendering log entries.

type Config

type Config struct {
	// TimeDone stops the background timestamp updater when it is closed.
	//
	// Optional. Default: nil
	TimeDone <-chan struct{}

	// Stream is a writer where logs are written
	//
	// Default: os.Stdout
	Stream io.Writer

	// Next defines a function to skip this middleware when returned true.
	//
	// Optional. Default: nil
	Next func(c fiber.Ctx) bool

	// Skip is a function to determine if logging is skipped or written to Stream.
	//
	// Optional. Default: nil
	Skip func(c fiber.Ctx) bool

	// Done is a function that is called after the log string for a request is written to Output,
	// and pass the log string as parameter.
	//
	// Optional. Default: nil
	Done func(c fiber.Ctx, logString []byte)

	// CustomTags defines per-middleware tag functions.
	// CustomTags override built-in and globally registered tags with the same name.
	//
	// Optional. Default: nil
	CustomTags map[string]LogFunc

	// You can define specific things before returning the handler: colors, template, etc.
	//
	// Optional. Default: beforeHandlerFunc
	BeforeHandlerFunc func(*Config)

	// You can use custom loggers with Fiber by using this field.
	// This field is really useful if you're using Zerolog, Zap, Logrus, apex/log etc.
	// If you don't define anything for this field, it'll use default logger of Fiber.
	//
	// Optional. Default: defaultLogger
	LoggerFunc func(c fiber.Ctx, data *Data, cfg *Config) error

	// Format defines the logging format for the middleware.
	//
	// You can customize the log output by defining a format string with placeholders
	// such as: ${time}, ${ip}, ${status}, ${method}, ${path}, ${latency}, ${error}, etc.
	// The full list of available placeholders can be found in 'tags.go' or at
	// 'https://docs.gofiber.io/api/middleware/logger/#constants'.
	//
	// Fiber provides predefined logging formats that can be used directly:
	//
	//   - DefaultFormat    → Uses the default log format: "[${time}] ${ip} ${status} - ${latency} ${method} ${path} ${error}"
	//   - CommonFormat     → Uses the Apache Common Log Format (CLF): "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent}\n"
	//   - CombinedFormat   → Uses the Apache Combined Log Format: "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent} \"${referer}\" \"${ua}\"\n"
	//   - JSONFormat      → Uses the JSON log format: "{\"time\":\"${time}\",\"ip\":\"${ip}\",\"method\":\"${method}\",\"url\":\"${url}\",\"status\":${status},\"bytesSent\":${bytesSent}}\n"
	//   - ECSFormat        → Uses the Elastic Common Schema (ECS) log format: {\"@timestamp\":\"${time}\",\"ecs\":{\"version\":\"1.6.0\"},\"client\":{\"ip\":\"${ip}\"},\"http\":{\"request\":{\"method\":\"${method}\",\"url\":\"${url}\",\"protocol\":\"${protocol}\"},\"response\":{\"status_code\":${status},\"body\":{\"bytes\":${bytesSent}}}},\"log\":{\"level\":\"INFO\",\"logger\":\"fiber\"},\"message\":\"${method} ${url} responded with ${status}\"}"
	// If no format is specified, the default format is used:
	// "[${time}] ${ip} ${status} - ${latency} ${method} ${path} ${error}"
	Format string

	// TimeFormat https://programming.guide/go/format-parse-string-time-date-example.html
	//
	// Optional. Default: 15:04:05
	TimeFormat string

	// TimeZone can be specified, such as "UTC" and "America/New_York" and "Asia/Chongqing", etc
	//
	// Optional. Default: "Local"
	TimeZone string

	// TimeInterval is the delay before the timestamp is updated
	//
	// Optional. Default: 500 * time.Millisecond
	TimeInterval time.Duration

	// DisableColors defines if the logs output should be colorized
	//
	// Default: false
	DisableColors bool

	// ForceColors forces the colors to be enabled even if the output is not a terminal
	//
	// Default: false
	ForceColors bool
	// contains filtered or unexported fields
}

Config defines the config for middleware.

type Data

type Data struct {
	Start         time.Time
	Stop          time.Time
	ChainErr      error
	Timestamp     string
	Pid           string
	ErrPaddingStr string
	TemplateChain [][]byte
	LogFuncChain  []LogFunc
}

Data is a struct to define some variables to use in custom logger function. TemplateChain and LogFuncChain are compiled once per middleware instance and shared across requests; custom LoggerFunc implementations must treat them as read-only.

type LogFunc

type LogFunc = logtemplate.Func[fiber.Ctx, Data]

LogFunc formats logging output using the provided buffer and request data.

type UnknownTagError added in v3.3.0

type UnknownTagError struct {
	Tag   string
	Param string
	Hint  string
}

UnknownTagError is the typed error panicked from New when Config.Format references an unknown tag. Tag is the offending tag including any parametric suffix; Param is the parameter portion when the tag was parametric (empty for bare tags); Hint, when non-empty, is a human- readable suggestion (e.g. parametric form for a likely-mistyped bare tag).

func (*UnknownTagError) Error added in v3.3.0

func (e *UnknownTagError) Error() string

func (*UnknownTagError) Unwrap added in v3.3.0

func (*UnknownTagError) Unwrap() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL