在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
/etc/systemd/journald.conf
中配置):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]