温馨提示×

debian下golang日志怎备份

小樊
34
2026-09-13 04:45:13
栏目: 编程语言

在 Debian 下对 Golang 应用的日志进行备份,通常有几种常见做法,取决于你的日志是怎么写的(标准输出、文件、还是用日志库)。下面按最常用、最稳妥的方式给你讲。


一、最推荐:日志直接写文件 + logrotate 备份(标准做法)

1. Golang 写日志到文件

例如:

logFile, _ := os.OpenFile("/var/log/myapp/app.log",
    os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)

2. 使用 Debian 自带 logrotate(重点)

logrotate 是 Debian 自带工具,可以自动切割、压缩、备份、删除旧日志。

创建配置

sudo vim /etc/logrotate.d/myapp

内容示例:

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

说明:

  • daily:每天备份
  • rotate 14:保留 14 份
  • compress:压缩
  • copytruncate:不重启 Golang 也能生效(非常重要)

手动测试

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

二、Golang 使用日志库(推荐生产环境)

使用 lumberjack(非常流行)

import "gopkg.in/natefinch/lumberjack.v2"

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    50, // MB
    MaxBackups: 14,
    MaxAge:     28, // days
    Compress:   true,
})

✅ 优点:

  • 自动切割
  • 自动压缩
  • 不用重启
  • 不用 logrotate

备份逻辑已经在代码里完成了。


三、容器 / systemd 场景

1. systemd 服务

如果 Golang 输出到 stdout:

[Service]
StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/error.log

再配合 logrotate。

2. Docker

docker logs --tail=1000 myapp > backup.log

或用 json-file + logrotate


四、远程备份(可选)

简单 rsync 定时备份

rsync -az /var/log/myapp/ backup@backup-server:/backup/myapp/

加 crontab:

0 3 * * * rsync -az /var/log/myapp/ backup@server:/backup/

五、总结建议(直接照做)

生产环境推荐组合

  • Golang + lumberjack
  • 或 写文件 + logrotate
  • 定期 rsync 到备份机

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

  • Golang 是否跑在 Docker
  • 日志写到哪
  • 想保留多久

我可以直接帮你写完整配置

0