Ubuntu Java日志备份与恢复策略
一 策略目标与分层
二 备份策略与配置
应用内轮转(推荐首选)
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %m%n</pattern>
</encoder>
</appender>
<root level="info"><appender-ref ref="FILE"/></root>
</configuration>
系统级轮转(logrotate)
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 appuser appgroup
sharedscripts
postrotate
# 若应用支持信号重开日志,可按实际替换为 HUP/USR1 等
kill -HUP $(cat /var/run/myapp.pid 2>/dev/null) 2>/dev/null || true
endscript
}
sudo logrotate -d /etc/logrotate.d/myappsudo logrotate -vf /etc/logrotate.d/myapp集中化与远程备份
脚本化归档与异地拷贝(可选)
#!/usr/bin/env bash
set -euo pipefail
LOG_DIR="/var/log/myapp"
ARC_DIR="/opt/archive/myapp/$(date +%Y/%m)"
mkdir -p "$ARC_DIR"
tar czf "$ARC_DIR/app_$(date +%F_%H%M%S).tgz" -C "$LOG_DIR" .
# 可选:同步到远端
# rclone copy "$ARC_DIR" remote:bucket/myapp/$(date +%Y/%m)/
# 清理本地超过 N 天的归档
find /opt/archive/myapp -type f -mtime +30 -delete
三 恢复策略与演练
快速定位与回看
tail -f /var/log/myapp/app.loggrep -n "ERROR" /var/log/myapp/app.log 或按时间窗口过滤。按场景恢复
app.2025-12-31.log.gz),配合 zcat/gunzip -c 检索。定期演练与指标
四 运维与风险控制
kill -HUP 触发重新打开),减少丢行风险。以上方案可按应用规模与合规要求裁剪:小型单体优先“应用内轮转 + logrotate”,中大型与多实例建议叠加“rsyslog/ELK 集中化”,关键业务再配合“脚本化归档与异地拷贝”实现长期留存与快速取证。