在 CentOS 上备份 Golang 应用产生的日志,通常和“日志写在哪、怎么滚动、是否用系统服务”有关。下面按常见场景给你一套实用方案。
常见情况:
./logs/app.log)logrus / zap / slog 写文件stdout/stderr,由 systemd 或 docker 收集查看方式:
# 看进程打开了哪些日志文件
lsof -p $(pgrep yourapp) | grep log
# 或看 systemd 服务
journalctl -u yourapp.service
which 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 程序(很重要)sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp
✅ 适合 90% 的 Golang 日志场景
journalctl -u yourapp.service
journalctl -u yourapp.service > myapp-$(date +%F).log
sudo vi /etc/systemd/journald.conf
SystemMaxUse=500M
MaxRetentionSec=30day
sudo systemctl restart systemd-journald
docker logs yourapp
docker logs yourapp > myapp-$(date +%F).log
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)
✅ 重要日志同步到对象存储(可选)
如果你愿意,可以告诉我:
我可以直接帮你写 可用的 logrotate 配置或备份脚本。