在 Debian 上压缩 Go(Golang)程序产生的日志,常见做法有 应用内轮转压缩、系统工具压缩、手动/脚本压缩 三类。下面按实用程度给你几种方案。
如果你用的是 Go 写的服务,最推荐在 应用层 解决。
lumberjack(最常用)import "gopkg.in/natefinch/lumberjack.v2"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 100, // MB
MaxBackups: 7,
MaxAge: 30, // 天
Compress: true, // 自动 gzip 压缩
})
✅ 优点
logrotate(Debian 自带)如果你已经是 直接写文件(如 app.log),用系统工具最稳。
sudo nano /etc/logrotate.d/myapp
示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
compress:用 gzipdelaycompress:避免当天日志被压copytruncate:不重启 Go 程序也能用rotate 14:保留 14 份sudo logrotate -d /etc/logrotate.d/myapp # 模拟
sudo logrotate -f /etc/logrotate.d/myapp # 强制执行
✅ 适合:
gzip /var/log/myapp/app.log.1
或批量:
gzip /var/log/myapp/*.log.*
crontab -e
示例(每天凌晨压缩):
0 0 * * * find /var/log/myapp -name "*.log.*" ! -name "*.gz" -exec gzip {} \;
| 场景 | 推荐 |
|---|---|
| Go 项目新写 | lumberjack |
| 已有服务 | logrotate |
| 临时处理 | gzip |
| 容器环境 | 应用内压缩 |
如果你愿意,可以告诉我:
我可以直接帮你写完整配置。