在 CentOS 上运行 Go(Golang)程序时,日志过大通常不是 Go 语言本身的问题,而是运行环境、日志配置或系统机制导致的。下面按常见原因逐一说明,并给出解决思路。
CentOS 默认不会自动帮你“切分”应用日志。
常见问题:
app.log)结果:
app.log → 10GB / 50GB / 甚至占满磁盘
✅ 解决:
logrotatelumberjack)很多项目默认:
log.SetLevel(log.DebugLevel)
在 CentOS 生产环境会疯狂打日志:
✅ 解决:
log.SetLevel(log.InfoLevel) // 或 Warn
Go 标准库:
log.Println(...)
没有:
✅ 推荐替代:
zap + lumberjacklogrus + rotatelogs典型场景:
connection refused
connection refused
connection refused
...
✅ 解决:
CentOS 7/8 使用 systemd:
journalctl -u your-service
如果 Go 程序输出到 stdout/stderr:
查看大小:
journalctl --disk-usage
✅ 解决:
# /etc/systemd/journald.conf
SystemMaxUse=500M
然后:
systemctl restart systemd-journald
常见错误写法:
nohup ./app > app.log 2>&1 &
✅ 改进:
./app >> app.log 2>&1
配合 logrotate
import "gopkg.in/natefinch/lumberjack.v2"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/app/app.log",
MaxSize: 100, // MB
MaxBackups: 5,
MaxAge: 7, // days
Compress: true,
})
/etc/logrotate.d/app
/var/log/app/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
# 查看大文件
du -sh /var/log/*
# 看 journal 占用
journalctl --disk-usage
# 看某个进程日志
lsof | grep log
CentOS 上 Go 日志过大,99% 是因为“没有日志轮转 + 日志级别太低”
如果你愿意,可以贴:
我可以帮你给出针对性优化方案。