Fiber默认不记录请求日志是因为其轻量高性能设计,fiber.New()创建实例默认不启用任何中间件,包括日志;需手动添加fiber.Logger或自定义中间件。

为什么默认不记录请求日志
Fiber 的核心设计是轻量和高性能,fiber.New() 创建的实例默认不启用任何中间件,包括日志。你看到的空日志或完全没输出,不是配置错了,而是压根没加——这点和 Express 或 Gin 不同,得手动插。
用 fiber.Logger 中间件最简单
官方提供的 fiber.Logger 是开箱即用的选择,但要注意它默认只打到标准输出(os.Stdout),生产环境需重定向;另外它的格式固定,不支持字段化结构日志。
- 直接在
app.Use(fiber.Logger())启用,会记录方法、路径、状态码、延迟、字节数 - 若想自定义时间格式,传入
fiber.LoggerConfig,比如TimeFormat: "2006-01-02 15:04:05" - 别把
Logger放在Recover之后——崩溃前的日志可能丢失;建议放在最外层中间件链开头
需要结构化日志?自己写中间件更可控
当你要对接 Loki、Datadog 或写入 JSON 文件时,fiber.Logger 的字符串模板就不够用了。这时用 c.Next() 手动捕获耗时、状态码和错误更稳妥。
- 用
c.Response().StatusCode()获取真实状态码(注意:必须在c.Next()之后读) - 用
c.Request().URI().String()拿原始路径(比c.Path()更准,后者已被路由解析过) - 记录耗时别用
time.Since()粗略算,应基于time.Now()在中间件入口打点,避免被后续中间件干扰 - 如果用了
fiber.Timeout,超时请求不会进你的日志中间件——得靠Timeout自带的OnTimeout回调补日志
日志写到文件而不是终端
fiber.Logger 和自定义中间件都依赖 Go 的 io.Writer 接口,所以只要把 os.File 或带轮转的 lumberjack.Logger 传进去就行,不用改逻辑。
- 写文件时务必用
os.O_APPEND | os.O_CREATE | os.O_WRONLY标志打开,否则并发写会覆盖 - 别用
log.SetOutput(file)去劫持全局 log —— Fiber 不走 Go 标准库 log,这招无效 - 如果用
lumberjack,注意MaxSize单位是 MB,不是字节;MaxBackups: 3表示最多保留 3 个归档文件
结构化日志字段命名要一致,比如统一用 status 而不是混用 status_code 或 http_status,否则下游解析容易出错。


















