在Debian系統中,可通過以下方式實施Golang日志清理策略:
logrotate
(推薦)sudo apt-get update && sudo apt-get install logrotate
/etc/logrotate.d/
下新建文件(如my-golang-app
),添加以下內容:/var/log/myapp/*.log {
daily # 每天輪轉
rotate 7 # 保留7天日志
compress # 壓縮舊日志
missingok # 忽略不存在的日志文件
notifempty # 僅輪轉非空文件
create 0640 root adm # 新日志權限和所有者
}
logrotate
默認通過cron
每日自動運行,無需額外配置。lumberjack
庫
go get github.com/natefinch/lumberjack
import "github.com/natefinch/lumberjack"
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 10, // 單個文件最大10MB
MaxBackups: 7, // 保留7個備份
MaxAge: 30, // 保留30天日志
Compress: true, // 壓縮舊日志
})
.service
)中指定日志文件路徑,例如:[Service]
StandardOutput=file:/var/log/myapp.log
journalctl
管理日志
sudo journalctl --vacuum-time=2weeks
SystemMaxUse=1G # 限制日志總大小為1GB
MaxRetentionSec=1month # 保留1個月日志
cleanup_logs.sh
:#!/bin/bash
LOG_DIR="/var/log/myapp"
find "$LOG_DIR" -type f -name "*.log" -mtime +7 -exec rm -f {} \;
crontab -e
添加每日執行:0 1 * * * /path/to/cleanup_logs.sh
/var/log/myapp
屬主為root
,權限755
)。logrotate -d
測試配置是否正確,避免誤刪日志。以上方法可根據實際需求選擇,優先使用logrotate
或lumberjack
實現自動化管理。[1,2,3,4,5,6,7,8,9,10,11]