CentOS 上 Golang 日志清理策略
策略总览
方案一 使用 logrotate 统一管理
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 myapp myapp
copytruncate
}
logrotate -d /etc/logrotate.d/myapp(干跑)logrotate -f /etc/logrotate.d/myapp方案二 应用内轮转 lumberjack
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logger := zap.NewProduction()
defer logger.Sync()
lumber := &lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // 单个文件最大 10 MB
MaxBackups: 7, // 最多保留 7 个备份
MaxAge: 30, // 最多保留 30 天
Compress: true, // 启用压缩
}
defer lumber.Close()
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(lumber),
zapcore.InfoLevel,
)
sugared := zap.New(core).Sugar()
sugared.Info("hello, this goes through lumberjack")
}
方案三 systemd 与 journald 的日志清理
sudo journalctl --vacuum-time=2weekssudo journalctl --vacuum-size=100Msudo journalctl -u myapp.service -n 100策略选择建议
logrotate -d/-f)。