Skip to main content
Version: Next

Fiberzap

Release Discord Test Security Linter

Zap logging support for Fiber.

Note: Requires Go 1.19 and above

Install

This middleware supports Fiber v2.

go get -u github.com/gofiber/fiber/v2
go get -u github.com/gofiber/contrib/fiberzap/v2
go get -u go.uber.org/zap

Signature

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

Config

PropertyTypeDescriptionDefault
Nextfunc(*Ctx) boolDefine a function to skip this middleware when returned truenil
Logger*zap.LoggerAdd custom zap logger.zap.NewDevelopment()
Fields[]stringAdd fields what you want see.[]string{"latency", "status", "method", "url"}
FieldsFunc[]zap.FieldDefine a function to add custom fields.nil
Messages[]stringCustom response messages.[]string{"Server error", "Client error", "Success"}
Levels[]zapcore.LevelCustom response levels.[]zapcore.Level{zapcore.ErrorLevel, zapcore.WarnLevel, zapcore.InfoLevel}
SkipURIs[]stringSkip logging these URI.[]string{}
GetResBodyfunc(c *fiber.Ctx) []byteDefine a function to get response body when return non-nil.
eg: When use compress middleware, resBody is unreadable. you can set GetResBody func to get readable resBody.
nil

Example

package main

import (
"log"

"github.com/gofiber/fiber/v2"
"github.com/gofiber/contrib/fiberzap/v2"
"go.uber.org/zap"
)

func main() {
app := fiber.New()
logger, _ := zap.NewProduction()

app.Use(fiberzap.New(fiberzap.Config{
Logger: logger,
}))

app.Get("/", func (c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})

log.Fatal(app.Listen(":3000"))
}

NewLogger

Signature

fiberzap.NewLogger(config ...fiberzap.LoggerConfig) *fiberzap.LoggerConfig

LoggerConfig

PropertyTypeDescriptionDefault
CoreConfigs[]CoreConfigDefine Config for zapcorefiberzap.LoggerConfigDefault
SetLogger*zap.LoggerAdd custom zap logger. if not nil, ZapOptions, CoreConfigs, SetLevel, SetOutput will be ignored.nil
ExtraKeys[]stringAllow users log extra values from context.[]string{}
ZapOptions[]zap.OptionAllow users to configure the zap.Option supplied by zap.[]zap.Option{}

Example

package main

import (
"context"
"github.com/gofiber/contrib/fiberzap/v2"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/log"
)

func main() {
app := fiber.New()
log.SetLogger(fiberzap.NewLogger(fiberzap.LoggerConfig{
ExtraKeys: []string{"request_id"},
}))
app.Use(func(c *fiber.Ctx) error {
ctx := context.WithValue(c.UserContext(), "request_id", "123")
c.SetUserContext(ctx)
return c.Next()
})
app.Get("/", func(c *fiber.Ctx) error {
log.WithContext(c.UserContext()).Info("Hello, World!")
return c.SendString("Hello, World!")
})
log.Fatal(app.Listen(":3000"))
}