CentOS上Golang日志清理策略
Lumberjack是Golang生态中常用的第三方日志轮转库,可与log、zap、logrus等日志库无缝集成,通过配置参数自动切割、清理日志文件。核心配置项包括:
MaxSize: 10表示10MB);MaxBackups: 5表示保留5个旧文件);MaxAge: 7表示保留7天);Compress: true开启压缩)。示例代码(结合zap日志库):
import (
"go.uber.org/zap"
"github.com/natefinch/lumberjack"
)
func newLogger() *zap.Logger {
return zap.New(zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(&lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 10,
MaxBackups: 5,
MaxAge: 7,
Compress: true,
}),
zapcore.InfoLevel,
))
}
这种方式的优势是应用层控制,无需依赖系统工具,适合需要精细化管理的场景。
Logrotate是CentOS自带的系统级日志管理工具,可通过配置文件自动轮转、压缩、删除Golang应用的日志文件。配置文件通常位于/etc/logrotate.d/目录下(如/etc/logrotate.d/myapp),示例如下:
/var/log/myapp/*.log {
daily # 每天轮转
rotate 7 # 保留7天
compress # 压缩旧日志
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root root # 新日志文件的权限和所有者
}
配置完成后,Logrotate会每天自动执行(可通过logrotate -vf /etc/logrotate.d/myapp手动测试)。这种方式的优势是系统级统一管理,适合多应用或多服务的场景。
通过Prometheus+Grafana等监控工具,实时监控日志文件的大小、数量和磁盘空间使用情况。当达到预设阈值(如日志文件超过1GB或磁盘空间剩余10%)时,触发告警通知运维人员,或通过自动化脚本(如find命令)清理旧日志:
# 清理7天前的日志文件
find /var/log/myapp -name "*.log" -mtime +7 -exec rm -f {} \;
这种方式可作为补充,避免因日志清理不及时导致的磁盘空间耗尽问题。
zap的NewJSONEncoder),便于后续压缩和解析,同时减少冗余信息;Info或Error级别,避免Debug级别的冗余日志(如zapcore.InfoLevel);zapcore.AddSync结合goroutine异步写入日志,减少日志记录对业务性能的影响。/var/log/myapp),删除不再需要的临时日志或调试日志;chown root:root /var/log/myapp、chmod 0755 /var/log/myapp),避免未授权访问或修改日志文件。