全书目录

第三十三篇:Fiber 完全指南 —— 极简高压快线城区宇宙

第十三章:日志、请求编号、Recover —— 快线城区的监控塔

1 分钟 333 字 第 624 / 962 个阅读单元

真实项目里至少要装三样:

  • requestid
  • logger
  • recover

典型顺序:

go
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())

顺序为什么这样?

text
请求进城
  ▼
先贴 Request ID
  ▼
再记录日志
  ▼
最后即使后面 panic,也有 Recover 兜底

#1. requestid 是每辆车的编号牌

官方文档说明它会把 request id 放进响应头和请求上下文。

go
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
go
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 的日志,经常像:

“全城车流都在动,但你找不到是哪辆车撞了哪根柱子。”