温馨提示×

golang日志centos如何备份

小樊
51
2026-10-11 23:19:14
栏目: 编程语言

在 CentOS 上备份 Golang 应用产生的日志,通常和“日志写在哪、怎么滚动、是否用系统服务”有关。下面按常见场景给你一套实用方案。


一、先确认 Golang 日志在哪里

常见情况:

  • 自己写文件(如 ./logs/app.log)
  • 使用 logrus / zap / slog 写文件
  • 输出到 stdout/stderr,由 systemd 或 docker 收集

查看方式:

# 看进程打开了哪些日志文件
lsof -p $(pgrep yourapp) | grep log

# 或看 systemd 服务
journalctl -u yourapp.service

二、最推荐:用 logrotate 自动备份(CentOS 自带)

1️⃣ 安装(一般已自带)

which logrotate

2️⃣ 编写 logrotate 配置

示例:备份 /var/log/myapp/*.log

sudo vi /etc/logrotate.d/myapp

内容:

/var/log/myapp/*.log {
    daily
    rotate 30
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

说明:

  • daily:每天备份
  • rotate 30:保留 30 天
  • compress:压缩
  • copytruncate:不重启 Golang 程序(很重要)

3️⃣ 手动测试

sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp

✅ 适合 90% 的 Golang 日志场景


三、如果 Golang 日志输出到 systemd(journalctl)

1️⃣ 查看日志

journalctl -u yourapp.service

2️⃣ 备份 journal 日志

journalctl -u yourapp.service > myapp-$(date +%F).log

3️⃣ 自动清理(防止磁盘爆)

sudo vi /etc/systemd/journald.conf
SystemMaxUse=500M
MaxRetentionSec=30day
sudo systemctl restart systemd-journald

四、Docker 运行的 Golang 日志

1️⃣ 查看

docker logs yourapp

2️⃣ 备份

docker logs yourapp > myapp-$(date +%F).log

3️⃣ 防止日志过大

docker run \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=5 \
  yourapp

五、手动脚本备份(不推荐长期使用)

#!/bin/bash
BACKUP_DIR=/backup/logs
DATE=$(date +%F)
mkdir -p $BACKUP_DIR
cp /var/log/myapp/app.log $BACKUP_DIR/app-$DATE.log
gzip $BACKUP_DIR/app-$DATE.log

加定时任务:

crontab -e
0 2 * * * /opt/backup_log.sh

六、最佳实践建议

✅ Golang 程序本身不要做日志切割
✅ 日志交给操作系统(logrotate / systemd / docker)
✅ 日志路径统一(/var/log/yourapp)
✅ 重要日志同步到对象存储(可选)


如果你愿意,可以告诉我:

  • Golang 用的什么日志库?
  • 日志写在哪个目录?
  • 是否是 systemd / docker?

我可以直接帮你写 可用的 logrotate 配置或备份脚本。

0 踩