在 CentOS 上备份 Java 应用日志,常见做法分几种场景,下面给你一套实用、可落地的方案(从简单到规范)。
常见路径:
/var/log/
/opt/xxx/logs/
/home/xxx/logs/
如果是 Spring Boot:
logs/application.log
logs/app.log
cp /opt/app/logs/app.log /opt/app/logs/app.log.bak
tar -czvf app-logs-$(date +%F).tar.gz /opt/app/logs/
mkdir -p /opt/backup/logs
vi /opt/backup/backup_java_log.sh
脚本内容:
#!/bin/bash
SRC="/opt/app/logs"
DEST="/opt/backup/logs"
DATE=$(date +%F)
tar -czvf $DEST/app-log-$DATE.tar.gz $SRC
# 只保留最近 7 天
find $DEST -name "*.tar.gz" -mtime +7 -delete
赋权:
chmod +x /opt/backup/backup_java_log.sh
crontab -e
每天凌晨 2 点执行:
0 2 * * * /opt/backup/backup_java_log.sh >> /opt/backup/logs/backup.log 2>&1
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/opt/app/logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/app/logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
✅ 优点:
rsync -avz /opt/app/logs/ user@backup:/backup/logs/
scp /opt/backup/logs/*.tar.gz user@backup:/backup/
✅ 不要直接 cp 正在写入的日志
log rotatekill -HUP PID 让 Java 重新打开日志文件✅ 避免磁盘被日志写满
df -h
du -sh /opt/app/logs
✅ 日志太大时
| 场景 | 推荐方案 |
|---|---|
| 小项目 | tar + cron |
| Spring Boot | Logback 自动滚动 |
| 生产环境 | Logback + rsync |
| 合规要求 | 备份 + 7~30 天保留 |
如果你愿意,可以告诉我:
我可以 直接给你一份立即可用的配置方案。