在 CentOS 上压缩 Golang 程序产生的日志,常见做法有应用层压缩、系统工具压缩、日志轮转+压缩几种方式。下面按实用场景给你一套清晰方案。
适合:运行中的服务日志(如 /var/log/app/*.log)
yum install logrotate -y
vim /etc/logrotate.d/mygolang
示例:
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
说明:
compress:用 gzip 压缩copytruncate:不重启 Golang 程序也能切割daily / rotate 7:每天切割,保留 7 天logrotate -f /etc/logrotate.d/mygolang
f, _ := os.Create("app.log.gz")
w := gzip.NewWriter(f)
log.SetOutput(w)
✅ 缺点:不能方便用 tail
import (
"gopkg.in/natefinch/lumberjack.v2"
)
logger := &lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // MB
MaxBackups: 7,
Compress: true, // gzip 压缩
}
log.SetOutput(logger)
✅ 自动切割 + 压缩
✅ 不需 logrotate
gzip /var/log/myapp/app.log
或批量:
find /var/log/myapp -name "*.log" -exec gzip {} \;
zcat app.log.gz
# 或
zless app.log.gz
✅ Golang + lumberjack(Compress:true)
✅ 或 Golang 写普通日志 + CentOS logrotate
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。