1. 手动删除日志文件
适用于临时清理或少量日志文件的场景,通过命令行直接删除指定目录下的日志文件。例如,删除/var/log/myapp/目录下所有.log文件:
sudo rm -rf /var/log/myapp/*.log
若需按修改时间筛选(如删除30天前的日志),可使用find命令:
find /var/log/myapp -type f -name "*.log" -mtime +30 -exec rm {} \;
注意:手动操作需谨慎,避免误删正在使用的日志文件。
2. 使用logrotate工具(系统级自动管理)
Debian系统自带的日志轮转工具,可自动完成日志的轮转、压缩、删除,无需修改应用程序代码。步骤如下:
sudo apt-get update && sudo apt-get install logrotate
/etc/logrotate.d/my-golang-app),添加以下内容(根据实际路径调整):/var/log/myapp/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7个日志文件
compress # 压缩旧日志(如.gz格式)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root adm # 新日志文件的权限和所有者
}
sudo logrotate -f /etc/logrotate.d/my-golang-app
logrotate会自动根据配置定期执行(通常通过cron任务)。
3. 通过systemd日志管理(适用于systemd服务)
若Golang应用以systemd服务(如myapp.service)运行,可使用journalctl命令管理日志:
sudo journalctl -u myapp.service -n 100
sudo journalctl --vacuum-time=2weeks
/etc/systemd/journald.conf,修改SystemMaxUse=100M,然后重启服务:sudo systemctl restart systemd-journald
此方法无需额外工具,直接集成到systemd日志体系中。
4. 使用Golang第三方日志库的内置轮转功能
主流日志库(如logrus、zap)可通过第三方库(如lumberjack)实现日志自动轮转和清理,无需依赖系统工具。以logrus+lumberjack为例:
lumberjack库:go get github.com/natefinch/lumberjack/v2
lumberjack.Logger,设置轮转参数:package main
import (
"log"
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logger := &lumberjack.Logger{
Filename: "/var/log/myapp/myapp.log", // 日志文件路径
MaxSize: 10, // 单个日志文件最大大小(MB)
MaxBackups: 7, // 保留的最大日志文件数
MaxAge: 30, // 保留的最大天数
Compress: true, // 压缩旧日志
}
logrus.SetOutput(logger) // 将logrus输出到lumberjack
logrus.Info("Application started")
// 应用程序逻辑...
}
此方法将轮转逻辑集成到应用中,适用于需要更精细控制的场景。
5. 自定义日志清理脚本+定时任务
通过编写Shell脚本定期清理日志,适合需要自定义清理逻辑的场景。例如,创建cleanup_logs.sh脚本:
#!/bin/bash
LOG_DIR="/var/log/myapp"
MAX_LOGS=7
# 按修改时间排序,获取需要删除的文件列表
LOG_FILES=$(ls -t $LOG_DIR/*.log)
# 计算需删除的文件数量(保留最新的MAX_LOGS个)
NUM_TO_DELETE=$(( ${#LOG_FILES} - MAX_LOGS ))
# 删除多余的旧日志
if [ $NUM_TO_DELETE -gt 0 ]; then
echo "Deleting old log files..."
for ((i=0; i<NUM_TO_DELETE; i++)); do
rm -f "${LOG_FILES[$i]}"
done
fi
chmod +x cleanup_logs.sh
crontab -e
在打开的编辑器中添加:0 1 * * * /path/to/cleanup_logs.sh
此方法灵活,可根据需求调整清理条件(如按大小、时间)。