Linux下Golang日志清理策略
一 策略总览与选型
二 使用 logrotate 的系统级清理
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
copytruncate
}
sudo logrotate -f /etc/logrotate.d/my-golang-appsudo logrotate -d /etc/logrotate.d/my-golang-app(dry-run)三 应用内置轮转 lumberjack
go get gopkg.in/natefinch/lumberjack.v2package main
import (
"log"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp.log", // 日志路径
MaxSize: 10, // 单个文件最大 10 MB
MaxBackups: 7, // 最多保留 7 个备份
MaxAge: 30, // 备份最长保留 30 天
Compress: true, // 启用压缩
})
log.Println("hello, rotating logs")
}
四 容器与服务场景的日志管理
sudo journalctl --vacuum-time=2weeks(保留最近两周);sudo journalctl -u myapp.service -n 100。五 清理策略与运维建议
rm 正在写入的日志;使用 logrotate 的 copytruncate 或让应用重新打开日志文件;必要时先停止写入或使用信号通知。