在Debian系统中,Golang日志轮转推荐结合系统工具与第三方库,实现高效管理。以下是两种主流方案及最佳实践:
适用场景:需统一管理多个服务日志,或需与系统日志集成。
配置步骤:
sudo apt-get update && sudo apt-get install logrotate
/etc/logrotate.d/
下新建文件(如golang-app
),内容示例:/var/log/myapp/*.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志(gzip)
missingok # 忽略不存在的日志文件
notifempty # 非空文件才轮转
create 0640 root adm # 新日志文件权限
}
sudo logrotate -d /etc/logrotate.d/golang-app # 测试配置
sudo systemctl restart logrotate # 重启服务(自动运行)
优势:系统级集成、低侵入性,适合生产环境。
适用场景:需在代码中精细控制日志格式或轮转逻辑(如按日期分割)。
推荐组合:zap
(高性能)+ lumberjack
(轮转功能)。
配置示例:
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
// 配置lumberjack轮转参数
lumberjackLogger := &lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 100, // 单个文件最大100MB
MaxBackups: 10, // 保留10个备份
MaxAge: 30, // 保留30天
Compress: true, // 启用压缩
LocalTime: true, // 使用本地时间命名
}
// 绑定到zap日志框架
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(lumberjackLogger),
zap.InfoLevel,
)
logger := zap.New(core)
defer logger.Sync()
logger.Info("日志轮转配置生效")
}
关键参数说明:
MaxSize
:单个日志文件超过指定大小(MB)时触发轮转。MaxBackups
:保留的旧日志文件数量,避免磁盘占满。MaxAge
:旧日志保留天数,配合compress
压缩节省空间。logrotate
,简单统一。zap+lumberjack
。/var/log/myapp
),并设置合理权限(如0755
)。ls -lh /var/log/myapp
)。