Go-Zero项目中需通过配置文件Log区块启用结构化日志,Mode和Encoding控制输出目标与格式(console/plain或file/json),Level设日志级别,MaxSize/MaxBackups/KeepDays管理保留策略,MustSetup可运行时硬编码覆盖但须在server.Start前且仅一次。

要在Go-Zero项目中正确启用结构化日志并按需切换默认JSON格式或自定义纯文本输出,必须理解logx模块的初始化时机与配置覆盖关系——直接调用log.Printf或修改标准库log会完全绕过go-zero日志体系,导致上下文字段(如traceid、service)丢失。
确认日志组件已自动启用
go-zero服务启动时,logx会自动读取配置文件中Log节,默认启用且无需手动import或init。只要你的配置文件(如etc/userapi-api.yaml)包含Log区块,服务一启动就会输出结构化日志。
若启动后控制台无任何日志,检查配置文件是否缩进错误:Log必须与Name、Host同级,且Log下子项(Mode、Level等)必须缩进两个空格。
修改日志输出模式与编码格式
在配置文件中设置Log.Mode和Log.Encoding即可切换输出目标与格式:
方法一:输出到控制台并使用纯文本(便于本地调试)
Mode: console
Encoding: plain
方法二:输出到文件并保持默认JSON(生产环境推荐)
Mode: file
Encoding: json
Path: ./logs
【Path值必须是目录路径,不是文件名】例如./logs会生成./logs/log-2026-11-12.log;若写成./logs/app.log则报错创建失败。
调整日志级别与保留策略
日志级别决定哪些消息会被记录,低级别日志(如debug)包含更多细节但影响性能:
第一步:在Log区块下设置Level字段:
Level: debug // 或 info、error、severe
第二步:限制磁盘占用,避免日志撑爆空间:
MaxSize: 50 // 单个日志文件最大50MB
MaxBackups: 7 // 最多保留7个旧文件
KeepDays: 14 // 日志最多保留14天,该字段优先级高于MaxAge
注意:KeepDays和MaxAge不能同时生效,KeepDays存在时MaxAge被忽略。
强制覆盖默认日志配置
当配置文件未生效或需运行时动态调整,可在main.go中调用logx.MustSetup硬编码覆盖:
logx.MustSetup(logx.LogConf{
Mode: "file",
Level: "error",
Path: "./logs",
Encoding: "json",
Compress: true,
})
这行代码必须放在server.Start()之前,且只能执行一次;重复调用会导致panic。


















