在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 或使用專業的日志管理工具會更加合適。