在CentOS系统中,压缩Golang应用程序的日志文件可以通过多种方法实现。以下是几种常用的方法:
创建一个Shell脚本
创建一个名为 compress_logs.sh 的脚本,内容如下:
#!/bin/bash
LOG_DIR="/path/to/your/logs" # 替换为你的日志目录
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
COMPRESSED_LOG="${LOG_DIR}/app.log.${TIMESTAMP}.gz"
# 检查日志文件是否存在
if [ -f "${LOG_DIR}/app.log" ]; then
gzip -c "${LOG_DIR}/app.log" > "${COMPRESSED_LOG}"
echo "Compressed log saved as ${COMPRESSED_LOG}"
# 可选:删除原始日志文件
rm "${LOG_DIR}/app.log"
else
echo "Log file does not exist."
fi
赋予执行权限
chmod +x compress_logs.sh
设置定时任务(Cron Job)
使用 crontab -e 编辑当前用户的Crontab,添加如下内容以每天凌晨压缩日志:
0 0 * * * /path/to/compress_logs.sh
这表示每天的00:00执行一次压缩脚本。
虽然Golang标准库的 log 包不直接支持日志轮转,但你可以使用第三方库如 lumberjack 来实现。
安装lumberjack
go get gopkg.in/natefinch/lumberjack.v2
修改Golang代码
在你的Golang应用程序中,引入并配置 lumberjack.Logger:
package main
import (
"log"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logger := &log.Logger{
Output: &lumberjack.Logger{
Filename: "/path/to/your/logs/app.log",
MaxSize: 10, // 每个日志文件最大10MB
MaxBackups: 3, // 最多保留3个备份
MaxAge: 28, // 日志文件最多保留28天
Compress: true, // 是否压缩备份日志
},
Prefix: "INFO: ",
}
logger.Println("This is a test log entry.")
}
这样,Golang应用程序会自动处理日志的轮转和压缩,无需额外的Shell脚本或外部工具。
如果你希望通过系统服务来管理日志压缩,可以结合 systemd 和 logrotate 工具。
配置logrotate
创建或编辑 /etc/logrotate.d/yourapp 文件,添加如下内容:
/path/to/your/logs/app.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
这将每天轮转一次日志,保留最近7天的压缩日志,并在日志为空时不进行轮转。
重新加载logrotate配置
sudo logrotate -f /etc/logrotate.conf
还有一些第三方日志管理工具,如 Fluentd 或 Logstash,可以集成到你的系统中,自动处理日志的收集、压缩和存储。
根据你的具体需求和环境,可以选择上述方法中的一种或多种结合使用,以实现高效的Golang日志压缩和管理。对于简单的场景,使用Shell脚本或Golang的 lumberjack 库已经足够;而对于复杂的生产环境,结合 systemd 和 logrotate 或使用专业的日志管理工具会更加合适。