在 Debian 上压缩 Go 应用产生的日志,常见做法有日志轮转+压缩、Go 程序内压缩、以及系统层面定时压缩。下面按实用程度给你几种方案。
Debian 自带 logrotate,非常适合压缩 Golang 日志。
假设你的 Go 日志在 /var/log/myapp/
sudo apt install logrotate
新建配置:
sudo nano /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
compress:用 gzip 压缩daily:每天轮转rotate 14:保留 14 份copytruncate:不重启 Go 程序也能截断日志(对 Go 很友好)sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp
如果你能改 Go 代码,推荐用成熟日志库。
import "gopkg.in/natefinch/lumberjack.v2"
logger := &lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // MB
MaxBackups: 7,
MaxAge: 14, // days
Compress: true, // gzip
}
✅ 自动切割 + 压缩
✅ 不用 logrotate
❌ 需改代码
如果不想用 logrotate:
0 0 * * * gzip -k /var/log/myapp/app.log && > /var/log/myapp/app.log
或更安全:
0 0 * * * mv /var/log/myapp/app.log /var/log/myapp/app-$(date +\%F).log && gzip /var/log/myapp/app-*.log
⚠️ 注意:直接清空日志可能导致 Go 写文件句柄失效,建议配合 copytruncate 或重启。
如果你的 Go 是 systemd 服务:
journalctl -u myapp.service
压缩由 systemd 自动处理:
sudo nano /etc/systemd/journald.conf
Compress=yes
| 场景 | 推荐 |
|---|---|
| 不改代码 | logrotate |
| 可改 Go 代码 | lumberjack |
| 容器/K8s | 日志库 + 外部收集 |
| systemd 服务 | journald |
如果你愿意,可以告诉我:
我可以给你精确配置。