logrotate是Debian系统自带的日志管理工具,可自动轮转、压缩和删除Golang应用程序的日志文件,无需修改应用代码。操作步骤:

sudo apt-get update && sudo apt-get install logrotate/etc/logrotate.d/目录下新建配置文件(如golang-app),内容如下(根据实际日志路径调整):/var/log/golang-app/*.log {daily# 每天轮转一次(可选:weekly/monthly)rotate 7 # 保留最近7个日志文件compress # 压缩旧日志(节省空间)missingok# 日志文件不存在时不报错notifempty # 日志为空时不轮转create 0640 root adm # 新日志文件的权限和所有者}sudo logrotate -d /etc/logrotate.d/golang-app若需立即执行轮转,可添加-f参数:sudo logrotate -f /etc/logrotate.d/golang-app/etc/cron.daily/logrotate),无需额外配置。若需更细粒度的日志管理(如按文件大小、应用状态触发轮转),可使用lumberjack库(第三方日志轮转工具),直接在代码中实现日志清理。操作步骤:
go get gopkg.in/natefinch/lumberjack.v2lumberjack.Logger设置为日志输出目标,示例如下:package mainimport ("log""gopkg.in/natefinch/lumberjack.v2")func main() {log.SetOutput(&lumberjack.Logger{Filename: "/var/log/golang-app/app.log", // 日志文件路径MaxSize:10,// 单个日志文件最大10MB(超过则轮转)MaxBackups: 5, // 保留最多5个旧日志文件MaxAge: 30,// 保留最多30天Compress: true,// 压缩旧日志})// 示例日志输出log.Println("This is a log message from Golang application.")}Filename:日志文件路径(需确保应用有写入权限);MaxSize:单个日志文件的最大大小(单位:MB);MaxBackups:保留的旧日志文件数量;MaxAge:旧日志文件的最大保留天数;Compress:是否压缩旧日志(减少存储占用)。若Golang应用通过systemd以服务形式运行(如myapp.service),可使用journalctl命令管理日志。常用操作:
sudo journalctl -u myapp.service -n 100# 查看最近100条日志sudo journalctl --vacuum-time=2weeks# 删除两周前的日志sudo journalctl --vacuum-size=100M# 限制日志总大小为100MB/etc/systemd/system/myapp.service),添加以下配置以限制日志大小:[Service]StandardOutput=journalStandardError=journalLogLevelMax=info重启服务使配置生效:sudo systemctl daemon-reloadsudo systemctl restart myapp.service若需完全自定义清理逻辑(如按文件名前缀、特定目录清理),可编写Shell脚本并通过cron定时执行。操作步骤:
/usr/local/bin/cleanup_golang_logs.sh):#!/bin/bashLOG_DIR="/var/log/golang-app"MAX_DAYS=7# 保留最近7天的日志# 查找并删除超过MAX_DAYS天的.log文件find "$LOG_DIR" -type f -name "*.log" -mtime +$MAX_DAYS -exec rm -f {} ;echo "$(date): Deleted old Golang logs older than $MAX_DAYS days." >> /var/log/log_cleanup.logsudo chmod +x /usr/local/bin/cleanup_golang_logs.shcrontab -e),添加以下行(每天凌晨1点执行):0 1 * * * /usr/local/bin/cleanup_golang_logs.sh或系统级cron(/etc/crontab):0 1 * * * root /usr/local/bin/cleanup_golang_logs.shjournalctl可简化日志管理;根据实际需求选择合适的方法,可有效避免Golang日志占用过多磁盘空间。