在 Debian 上,用 Go 写的程序产生的日志 想要“定时清理”,通常有三种常见做法,按推荐程度排序:
logrotate(系统级,最省心)适合:所有 Go 程序(只要日志写到文件)
/var/log/myapp/app.log
sudo vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启 Go 程序就能截断日志(很重要)sudo logrotate -d /etc/logrotate.d/myapp # 模拟
sudo logrotate -f /etc/logrotate.d/myapp # 强制执行
✅ 不需要改 Go 代码 ✅ Debian 默认每天自动跑
适合:你控制 Go 代码,且不想用系统工具
lumberjackimport "gopkg.in/natefinch/lumberjack.v2"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // MB
MaxBackups: 7,
MaxAge: 7, // 天
Compress: true,
})
优点:
缺点:
不推荐,但可用
crontab -e
每天凌晨删 7 天前日志:
0 0 * * * find /var/log/myapp -name "*.log" -mtime +7 -delete
⚠ 风险:
| 场景 | 推荐方案 |
|---|---|
| 生产环境 | ✅ logrotate |
| 自己写的 Go 服务 | lumberjack |
| 临时脚本 | cron |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。