在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")
}
}
以上方法各有优缺点:
根据你的具体需求选择合适的方法进行日志备份。