Revel 默认日志配置在 conf/app.conf 中修改,通过 [log] 段设置 log.output、log.file.filename 等参数,不支持代码中覆盖或热重载,重启才生效。

Revel 默认日志配置在哪改
Revel 的日志行为由 conf/app.conf 控制,不是代码里硬编码的。它用的是 Revel 自带的 log4go(非 logrus/zap),所以别去 import 第三方日志库试图覆盖——根本不会生效。
关键配置项集中在 [log] 段,例如:
log.level = DEBUG log.output = file log.file.filename = logs/app.log log.file.maxsize = 10485760 log.file.maxlines = 1000
注意:log.output 只接受 stdout、file 或 both;不支持自定义写入器或 hook。
-
log.file.filename是相对路径,以项目根目录为基准,不是app/或conf/目录下 - 目录必须提前存在,Revel 不会自动创建
logs/文件夹,启动时若路径不可写会静默退回到stdout - 修改后需重启应用才生效,热重载不刷新日志配置
怎么改日志格式(时间、级别、标签)
Revel 的日志格式固定为:[TIME] [LEVEL] [TAG] MESSAGE,比如 [INFO] app user login success。它不提供类似 logrus 的 SetFormatter 或 zap 的 EncoderConfig 接口。
真正能调的只有两个字段:
-
log.time.format:控制时间格式,默认是2006-01-02 15:04:05,可改成2006-01-02T15:04:05Z07:00等 Go time 格式字符串 -
log.level:影响输出哪些级别,但不改变格式本身;DEBUG会额外打印文件名和行号(仅开发模式)
如果你需要 JSON 格式、结构化字段(如 trace_id、user_id),Revel 原生不支持——得在业务代码里手动构造 JSON 字符串再传给 revel.INFO.Printf,或者换框架(如 Gin + zap)。
为什么 log.file.maxsize 不生效
这个参数只在使用 log.output = file 且启用了轮转(log rotation)时才起作用,但 Revel 的轮转逻辑依赖于 log.file.maxlines 和 log.file.maxsize 同时设置,并且要求 log.file.backupcount > 0(默认是 0,即不备份)。
- 缺一不可:三个参数都得显式配置,例如
log.file.backupcount = 5 - 文件大小单位是字节,不是 KB/MB;
10485760= 10MB - 轮转触发时机是「写入前检查」,不是实时监控;所以可能略超一点才切
- 备份文件名格式固定为
app.log.1、app.log.2…,不可自定义
生产环境日志路径要注意什么
容器化部署(如 Docker + docker-compose.yml)时,log.file.filename 必须指向容器内可写卷(volume)路径,否则日志会丢失或 crash。
- 不要写成
logs/app.log然后指望镜像里自带该目录;Docker 镜像中该路径很可能不存在或只读 - 推荐写成绝对路径,如
/var/log/myapp/app.log,并在docker-compose.yml中挂载 volume:- ./logs:/var/log/myapp - 如果用
revel build打包后运行,确保运行用户(如nonroot)对目标目录有写权限,Alpine 镜像默认没logs组
Revel 日志系统是单例 + 全局静态配置,改一处就全服务生效,没有 per-controller 或 per-module 级别的日志开关——这点和 Gin 的中间件日志、或 zap 的 logger 实例完全不一样,容易误判作用域。


















