在 Debian 下对 Golang 应用的日志进行备份,通常有几种常见做法,取决于你的日志是怎么写的(标准输出、文件、还是用日志库)。下面按最常用、最稳妥的方式给你讲。
例如:
logFile, _ := os.OpenFile("/var/log/myapp/app.log",
os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)
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
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,
})
✅ 优点:
备份逻辑已经在代码里完成了。
如果 Golang 输出到 stdout:
[Service]
StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/error.log
再配合 logrotate。
docker logs --tail=1000 myapp > backup.log
或用 json-file + logrotate。
rsync -az /var/log/myapp/ backup@backup-server:/backup/myapp/
加 crontab:
0 3 * * * rsync -az /var/log/myapp/ backup@server:/backup/
✅ 生产环境推荐组合:
lumberjacklogrotatersync 到备份机如果你愿意,可以告诉我:
我可以直接帮你写完整配置。