在CentOS上实现Golang日志轮转主要有以下两种策略:
一、使用系统工具logrotate(推荐)
- 原理:通过系统级日志管理工具
logrotate定时轮转日志文件,支持按时间、文件大小等策略轮转,并可配置压缩、保留天数等参数。 - 配置步骤:
- 安装logrotate:
sudo yum install logrotate。 - 创建配置文件:在
/etc/logrotate.d/目录下新建文件(如golang),内容示例:/path/to/golang/logs/*.log { daily # 每日轮转 rotate 7 # 保留7天日志 compress # 压缩旧日志 missingok # 忽略不存在的日志文件 notifempty # 非空文件才轮转 create 0640 root adm # 新日志文件权限 } ```。 - 测试配置:
sudo logrotate -d /etc/logrotate.d/golang。 - 设置定时任务(默认已集成到系统cron)。
- 安装logrotate:
二、使用Golang第三方库lumberjack
- 原理:在Golang程序中通过
lumberjack库实现日志轮转,支持按文件大小、数量、天数等参数自动轮转,无需依赖系统工具。 - 配置步骤:
- 安装库:
go get github.com/natefinch/lumberjack。 - 在代码中配置:
import "gopkg.in/natefinch/lumberjack.v2" log.SetOutput(&lumberjack.Logger{ Filename: "/var/log/myapp.log", MaxSize: 10, // 单个文件最大10MB MaxBackups: 3, // 保留3个备份 MaxAge: 28, // 保留28天 Compress: true, // 压缩旧日志 }) ```。
- 安装库:
选择建议
- 系统级管理:推荐使用
logrotate,适合需要统一管理多个服务日志的场景,配置简单且支持定时任务。 - 应用级控制:使用
lumberjack更适合需要精细化控制单个应用日志的场景,如动态调整轮转参数。