CentOS环境下Golang日志清理策略

logrotate是CentOS自带的日志管理工具,可统一管理Golang应用及其他服务的日志,无需修改代码。通过创建配置文件实现日志的轮转、压缩、删除自动化。配置步骤:
/etc/logrotate.d/目录下创建应用专属配置文件(如golang-app),内容示例如下:/path/to/your/golang-app/*.log {daily # 每天轮转一次rotate 7# 保留最近7份旧日志compress# 压缩旧日志(节省空间)missingok # 日志文件不存在时不报错notifempty# 日志为空时不轮转create 0640 root root# 新日志文件权限及所有者}cron每日自动运行,无需额外操作。也可手动触发:logrotate -vf /etc/logrotate.d/golang-app(-v显示详细过程,-f强制轮转)。优势:系统级统一管理,适用于多应用场景,减少维护成本。通过Golang第三方库实现内置日志轮转,无需依赖外部工具,适合需要精细化控制的场景。常用组合:
go get gopkg.in/natefinch/lumberjack.v2配置示例:package mainimport ("log""gopkg.in/natefinch/lumberjack.v2")func main() {log.SetOutput(&lumberjack.Logger{Filename: "/var/log/golang-app/app.log",// 日志路径MaxSize:100,// 单个文件最大100MBMaxBackups: 5,// 保留5个备份MaxAge: 30, // 保留30天Compress: true, // 启用gzip压缩})log.Println("This is a rotated log message.")}通过编写Shell脚本定期清理旧日志,结合cron定时执行,适合简单场景。脚本示例(clean_golang_logs.sh):
#!/bin/bashLOG_DIR="/var/log/golang-app"DAYS_TO_KEEP=7# 保留7天日志find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} ;find "$LOG_DIR" -type f -name "*.log.gz" -mtime +$DAYS_TO_KEEP -exec rm -f {} ;# 清理压缩日志设置定时任务:
chmod +x /path/to/clean_golang_logs.shcrontab:crontab -e,添加以下行(每天凌晨2点执行):0 2 * * * /path/to/clean_golang_logs.sh >> /var/log/log_clean.log 2>&1注意:需手动管理日志路径和保留策略,适合小型应用或临时清理。
清理日志的同时,需保障日志数据的安全性:
rsync或scp加密传输日志到远程服务器(如rsync -avz -e ssh /var/log/golang-app/*.log user@remote:/backup/logs/)。LUKS加密日志分区,或使用gpg加密单个日志文件(如gpg -c app.log)。640(所有者可读写,组用户只读),避免未授权访问:chown root:adm /var/log/golang-app/*.logchmod 640 /var/log/golang-app/*.log优势:防止日志泄露,符合安全合规要求(如GDPR)。
通过监控工具实时跟踪日志文件大小、数量及清理状态,及时预警异常:
Prometheus+Granafa监控日志文件指标(如lumberjack暴露的/metrics接口),或ELK Stack集中分析日志。