真实项目里至少要装三样:
requestidloggerrecover
典型顺序:
import (
"github.com/gofiber/fiber/v3/middleware/logger"
recoverer "github.com/gofiber/fiber/v3/middleware/recover"
"github.com/gofiber/fiber/v3/middleware/requestid"
)
app.Use(requestid.New())
app.Use(logger.New())
app.Use(recoverer.New())顺序为什么这样?
请求进城
▼
先贴 Request ID
▼
再记录日志
▼
最后即使后面 panic,也有 Recover 兜底#1. requestid 是每辆车的编号牌
官方文档说明它会把 request id 放进响应头和请求上下文。
app.Use(requestid.New())
app.Get("/hello", func(c fiber.Ctx) error {
id := requestid.FromContext(c)
return c.JSON(fiber.Map{
"requestId": id,
})
})#2. logger 要尽早注册
官方文档明确提醒:
只有在 logger 之后注册的路由,才会被 logger 记录。
所以别把 logger 放到文件最下面才想起来加。
#3. 给日志加 request id
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
Format: "[${time}] ${status} - ${method} ${path} request_id=${locals:requestid}\n",
}))如果你想完全按官方 CustomTags 方式定制,也可以配 requestid.FromContext(c)。
工程上这件事非常值钱,因为没有 request id 的日志,经常像:
“全城车流都在动,但你找不到是哪辆车撞了哪根柱子。”