CentOS 上 Golang 日志的清理策略
策略总览与选择
方案一 logrotate 系统级清理
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 myapp myapp
sharedscripts
postrotate
systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}
sudo logrotate -d /etc/logrotate.d/myappsudo logrotate -f /etc/logrotate.d/myapp方案二 应用内轮转 lumberjack
package main
import (
"log"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logger := log.New(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log", // 日志路径
MaxSize: 10, // 单个文件最大 10MB
MaxBackups: 7, // 最多保留 7 个备份
MaxAge: 30, // 备份最长保留 30 天
Compress: true, // 启用压缩
}, "", log.LstdFlags)
logger.Println("hello, this is a rolling log")
}
systemd 场景的补充
sudo journalctl -u myapp.service -n 100sudo journalctl --vacuum-time=2weekssudo systemctl restart systemd-journald。容量规划与最佳实践