温馨提示×

centos怎样备份golang日志

小樊
38
2026-09-30 06:29:22
栏目: 编程语言

在 CentOS 上“备份 Golang 日志”通常取决于日志是怎么产生的(文件?stdout?系统 journal?),以及你想要的备份方式(手动 / 定时 / 远程)。下面按常见场景给你讲清楚。


一、先确认 Golang 日志在哪

1. 日志写文件(最常见)

比如你的 Go 程序:

log.SetOutput(os.OpenFile("/var/log/myapp/app.log", ...))

那日志就在:

/var/log/myapp/app.log

2. 日志输出到 stdout / stderr

如果是 systemd 启动的:

[Service]
ExecStart=/opt/myapp/app

日志在:

journalctl -u myapp

二、最常用:直接备份日志文件

1. 手动备份

cp /var/log/myapp/app.log /backup/app_$(date +%F).log

2. 压缩备份

tar zcvf /backup/app_$(date +%F).tar.gz /var/log/myapp/

三、定时自动备份(推荐 crontab)

示例:每天凌晨备份

crontab -e

添加:

0 0 * * * tar zcf /backup/app_$(date +\%F).tar.gz /var/log/myapp/

注意:% 在 crontab 里要转义


四、避免日志无限变大(非常重要)

✅ 推荐:用 logrotate(CentOS 自带)

创建配置

vi /etc/logrotate.d/myapp

示例:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}
  • copytruncate:不重启 Go 程序也能切日志
  • rotate 7:保留 7 天

测试:

logrotate -d /etc/logrotate.d/myapp

五、如果 Golang 日志在 journalctl

备份 journal 日志

journalctl -u myapp > /backup/myapp_$(date +%F).log

或导出成结构化

journalctl -u myapp -o json > /backup/myapp.json

六、远程备份(进阶)

1. scp 到备份机

scp /backup/app_*.tar.gz backup@192.168.1.10:/data/backup/

2. rsync(推荐)

rsync -avz /backup/ backup@server:/backup/

七、Golang 程序侧建议(很关键)

✅ 使用成熟日志库

  • logrus
  • zap
  • slog(Go 1.21+)

并配合:

  • 日志分级
  • 文件切割(如 lumberjack)

示例:

&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    100,
    MaxBackups: 7,
    Compress:   true,
}

八、总结(最简方案)

最稳妥组合:

  1. Go 写文件日志
  2. logrotate 自动切割
  3. crontab 定时压缩备份
  4. rsync 传到备份服务器

如果你愿意,可以把:

  • Go 日志配置
  • 启动方式(systemd?docker?)
  • 想备份到哪(本地 / 远程)

发出来,我可以给你定制一份备份方案。

0 踩