Fiberzap
Zap 对 Fiber 的日志支持。
注意: 需要 Go 1.19 或更高版本
安装
此中间件支持 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
签名
fiberzap.New(config ...fiberzap.Config) fiber.Handler
配置
属性 | 类型 | 描述 | 默认值 |
---|---|---|---|
下一页 | func(*Ctx) bool | 定义一个函数,当返回 true 时跳过此中间件 | nil |
Logger | *zap.Logger | 添加自定义 zap 日志器。 | zap.NewDevelopment() |
Fields | []string | 添加您想要查看的字段。 | []string{"latency", "status", "method", "url"} |
FieldsFunc | []zap.Field | 定义一个函数来添加自定义字段。 | nil |
Messages | []string | 自定义响应消息。 | []string{"服务器错误", "客户端错误", "成功"} |
Levels | []zapcore.Level | 自定义响应级别。 | []zapcore.Level{zapcore.ErrorLevel, zapcore.WarnLevel, zapcore.InfoLevel} |
SkipURIs | []string | 跳过记录这些 URI。 | []string{} |
GetResBody | func(c *fiber.Ctx) []byte | 定义一个函数,当返回非 nil 时获取响应体。 例如:当使用压缩中间件时,resBody 不可读。您可以设置 GetResBody 函数来获取可读的 resBody。 | nil |
示例
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()
defer logger.Sync()
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
签名
fiberzap.NewLogger(config ...fiberzap.LoggerConfig) *fiberzap.LoggerConfig
LoggerConfig
属性 | 类型 | 描述 | 默认值 |
---|---|---|---|
CoreConfigs | []CoreConfig | 为 zapcore 定义配置 | fiberzap.LoggerConfigDefault |
SetLogger | *zap.Logger | 添加自定义 zap 日志器。如果非 nil,ZapOptions 、CoreConfigs 、SetLevel 、SetOutput 将被忽略。 | nil |
ExtraKeys | []string | 允许用户从上下文中记录额外的值。 | []string{} |
ZapOptions | []zap.Option | 允许用户配置由 zap 提供的 zap.Option。 | []zap.Option{} |
示例
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()
logger := fiberzap.NewLogger(fiberzap.LoggerConfig{
ExtraKeys: []string{"request_id"},
})
log.SetLogger(logger)
defer logger.Sync()
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"))
}