在 Debian 上,Go(Golang)本身不负责日志压缩,通常是用 系统日志工具 或 Go 日志库 + 外部工具 来完成。下面按常见场景给你几种做法。
如果你在 Debian 上运行 Go 程序,并把日志写到文件(如 /var/log/myapp.log),最佳方式是 logrotate。
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 程序也能截断日志(很重要)sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp
如果你不想用 logrotate,可以用 Go 日志库自动压缩。
lumberjackgo.uber.org/zap(配合 lumberjack)import (
"gopkg.in/natefinch/lumberjack.v2"
"go.uber.org/zap"
)
logger := zap.New(zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(&lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 100, // MB
MaxBackups: 14,
MaxAge: 28, // 天
Compress: true, // gzip 压缩
}),
zap.InfoLevel,
))
✅ 优点:
如果你的 Go 程序是 systemd 服务,默认日志在 journald:
journalctl -u myapp
压缩由 systemd 自动管理:
sudo nano /etc/systemd/journald.conf
Compress=yes
SystemMaxUse=500M
然后:
sudo systemctl restart systemd-journald
gzip /var/log/myapp.log
⚠️ 风险:Go 程序仍持有文件句柄,可能导致日志丢失。
| 场景 | 推荐方案 |
|---|---|
| Debian 服务器 | logrotate |
| 容器 / 跨平台 | Zap + Lumberjack |
| systemd 服务 | journald |
| 临时处理 | 手动 gzip(谨慎) |
如果你愿意,可以告诉我:
我可以给你精确配置。