Ubuntu Java日志备份方法
一 系统级方案 Logrotate
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
# 若应用支持信号重开日志,可按需发送 HUP;否则可省略或改为重启应用
/bin/kill -HUP $(cat /var/run/myapp.pid 2>/dev/null) 2>/dev/null || true
endscript
}
二 应用内方案 日志框架按时间滚动
<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}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE"/>
</root>
</configuration>
log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/application.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n
三 脚本加定时任务 拷贝归档与清理
#!/usr/bin/env bash
set -e
LOG_DIR="/opt/myapp/logs"
BACKUP_DIR="/opt/backup/java_logs"
DATE=$(date +"%Y%m%d_%H%M%S")
mkdir -p "$BACKUP_DIR"
# 拷贝并保留原文件句柄(不停应用)
for f in "$LOG_DIR"/*.log; do
[ -f "$f" ] || continue
gzip -c "$f" > "$BACKUP_DIR/$(basename "$f")_$DATE.gz"
done
# 可选:清空原日志(谨慎,确保业务允许)
# for f in "$LOG_DIR"/*.log; do : > "$f"; done
# 清理 30 天前的备份
find "$BACKUP_DIR" -name "*.gz" -mtime +30 -delete
0 0 * * * /opt/scripts/backup_logs.sh >> /var/log/backup_java.log 2>&1
四 集中化与远程备份
$template remote-incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
修改后重启:sudo systemctl restart rsyslog五 实践建议