在CentOS上備份Golang應用程序的日志,可以采用以下幾種方法:
創建備份目錄:
mkdir -p /backup/logs
編寫rsync腳本:
創建一個腳本文件,例如backup_logs.sh
,內容如下:
#!/bin/bash
LOG_DIR="/path/to/your/golang/logs"
BACKUP_DIR="/backup/logs/$(date +%Y%m%d%H%M%S)"
rsync -av --delete $LOG_DIR $BACKUP_DIR
設置腳本權限:
chmod +x backup_logs.sh
使用cron進行定期備份: 編輯crontab文件:
crontab -e
添加一行,例如每天凌晨2點執行備份:
0 2 * * * /path/to/backup_logs.sh
安裝logrotate(如果尚未安裝):
yum install logrotate
配置logrotate:
創建或編輯/etc/logrotate.d/your_app
文件,內容如下:
/path/to/your/golang/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root root
postrotate
/usr/bin/rsync -av --delete /path/to/your/golang/logs/ /backup/logs/$(date +%Y%m%d%H%M%S)/
endscript
}
這個配置會每天輪轉日志文件,并保留最近7天的日志。輪轉后的日志會被壓縮,并且會使用rsync進行備份。
如果你使用的是Golang的日志庫(如logrus
、zap
等),可以在代碼中添加自定義的日志備份邏輯。
例如,使用logrus
:
package main
import (
"github.com/sirupsen/logrus"
"os"
"time"
)
func main() {
logger := logrus.New()
logger.SetOutput(os.Stdout)
// 自定義日志備份邏輯
go func() {
for {
time.Sleep(24 * time.Hour)
backupLogs("/path/to/your/golang/logs", "/backup/logs/$(date +%Y%m%d%H%M%S)")
}
}()
logger.Info("Application started")
// 你的應用程序邏輯
}
func backupLogs(src, dest string) {
// 使用rsync或其他工具進行備份
cmd := exec.Command("rsync", "-av", "--delete", src, dest)
err := cmd.Run()
if err != nil {
logrus.WithError(err).Error("Failed to backup logs")
}
}
以上方法各有優缺點:
根據你的具體需求選擇合適的方法進行日志備份。