CentOS下Golang日志清理策略
策略总览与选择建议
系统级 logrotate 策略
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 myapp myapp
copytruncate
}
关键参数说明:
应用内置轮转 lumberjack
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
logger := zap.New(
zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // 单个文件最大 10MB
MaxBackups: 7, // 最多保留 7 个备份
MaxAge: 30, // 最多保留 30 天
Compress: true, // 启用压缩
}),
zap.InfoLevel,
),
)
defer logger.Sync()
接入系统日志 rsyslog 或 journald
定时脚本与辅助优化
#!/usr/bin/env bash
LOG_DIR="/var/log/myapp"
MAX_LOGS=7
cd "$LOG_DIR" || exit 1
ls -tp *.log | tail -n +$((MAX_LOGS+1)) | xargs -r rm -f
加入 crontab:0 1 * * * /path/cleanup_logs.sh