1. 使用logrotate工具(系统自带,自动化管理)
logrotate是CentOS/Linux系统自带的日志管理工具,可自动完成Java日志的轮转、压缩、清理,无需额外安装复杂软件。
sudo yum install logrotate命令安装(CentOS默认仓库包含该工具)。/etc/logrotate.d/java文件(文件名可自定义,如myapp),添加以下内容(需替换为实际Java日志路径):/path/to/your/java/logs/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7天的日志文件
compress # 使用gzip压缩旧日志(生成.gz文件)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 0644 root root # 轮转后创建新日志文件,权限644,所有者root
}
logrotate -d /etc/logrotate.d/java测试配置是否正确(模拟运行,不实际修改文件);若测试无误,通过sudo systemctl reload logrotate重新加载配置,使设置生效。2. 编写Shell脚本+定时任务(灵活定制,适合复杂需求)
通过Shell脚本实现Java日志的备份、压缩、清理,并结合cron定时任务定期执行,适合需要自定义备份逻辑(如备份到特定目录、保留更长时间)的场景。
/usr/local/bin/backup_java_logs.sh),添加以下内容(需替换为实际路径):#!/bin/bash
LOG_DIR="/path/to/your/java/logs" # Java日志目录
BACKUP_DIR="/backup/java_logs" # 备份存储目录
DATE=$(date +%Y%m%d) # 当前日期(格式:YYYYMMDD)
# 创建备份目录(若不存在)
mkdir -p "$BACKUP_DIR"
# 备份日志文件(压缩为.tar.gz格式)
tar -czf "$BACKUP_DIR/java_logs_$DATE.tar.gz" -C "$LOG_DIR" .
# 清空原始日志文件(避免日志堆积)
> "$LOG_DIR/*.log"
# 删除30天前的备份文件(保留最近30天)
find "$BACKUP_DIR" -type f -name "java_logs_*.tar.gz" -mtime +30 -exec rm -f {} \;
chmod +x /usr/local/bin/backup_java_logs.sh命令让脚本可执行。crontab -e编辑当前用户的cron配置,添加以下行(每天凌晨2点执行备份):0 2 * * * /usr/local/bin/backup_java_logs.sh
保存后,cron会自动按计划执行脚本。3. 使用rsync同步到远程服务器(异地容灾,数据安全)
若需要异地备份Java日志(如防止本地服务器故障导致日志丢失),可使用rsync工具将日志同步到远程服务器。
/usr/local/bin/sync_java_logs.sh),添加以下内容(需替换为实际路径和远程服务器信息):#!/bin/bash
LOCAL_LOG_DIR="/path/to/your/java/logs" # 本地Java日志目录
REMOTE_USER="backup_user" # 远程服务器用户名
REMOTE_HOST="remote.server.com" # 远程服务器IP或域名
REMOTE_DIR="/backup/java_logs" # 远程备份目录
# 创建远程备份目录(带日期,避免覆盖)
ssh "$REMOTE_USER@$REMOTE_HOST" "mkdir -p \"$REMOTE_DIR/$(date +%Y%m%d)\""
# 同步日志文件到远程服务器(压缩传输,节省带宽)
rsync -avz --delete "$LOCAL_LOG_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$(date +%Y%m%d)/"
# 删除远程服务器上30天前的备份(保留最近30天)
ssh "$REMOTE_USER@$REMOTE_HOST" "find \"$REMOTE_DIR\" -type d -name \"$(date -d '30 days ago' +%Y%m%d)\" -exec rm -rf {} \;"
chmod +x /usr/local/bin/sync_java_logs.sh命令让脚本可执行。crontab -e编辑cron配置,添加以下行(每天凌晨3点执行同步):0 3 * * * /usr/local/bin/sync_java_logs.sh
此时,本地Java日志会每天同步到远程服务器的对应日期目录中,且远程服务器会自动清理30天前的备份。4. 结合Java日志框架内置功能(源头管理,减少人工干预)
若Java应用使用Log4j、Logback等日志框架,可通过配置框架的日志滚动策略(Rolling Policy),实现日志文件的自动分割、压缩和清理,无需额外编写脚本。
logback.xml文件):<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/path/to/your/java/logs/app.log</file> <!-- 当前日志文件路径 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/path/to/your/java/logs/app.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <!-- 滚动文件名(带日期,自动压缩) -->
<maxHistory>7</maxHistory> <!-- 保留最近7天的日志文件 -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> <!-- 日志格式 -->
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
上述配置会将日志按天分割(app.YYYY-MM-DD.log.gz),并保留7天,无需手动备份。