使用 logrotate 进行日志轮转(系统级自动化)logrotate 是 CentOS 系统自带的日志管理工具,可自动轮转、压缩、删除 Java 日志文件,避免日志占用过多磁盘空间。

sudo yum install logrotate 进行安装。/etc/logrotate.d/java 文件,添加以下内容(需替换为实际 Java 日志路径):/path/to/your/java/logs/*.log {daily# 每天轮转一次rotate 7 # 保留最近7天的日志compress # 压缩旧日志(节省空间)missingok# 日志文件不存在时不报错notifempty # 日志为空时不轮转create 0644 root root # 新日志文件权限为640,属主root、属组root}logrotate -d /etc/logrotate.d/java 测试配置是否正确(无错误则生效);或执行 sudo systemctl reload logrotate 手动加载配置。编写 Shell 脚本手动/定时清理通过脚本实现 Java 日志的备份与清理,适合需要自定义清理逻辑的场景。
backup_java_logs.sh,内容如下(替换为实际路径和日期格式):#!/bin/bashBACKUP_DIR="/path/to/backup/directory"# 备份目录DATE=$(date +%Y%m%d)# 当前日期(如20251009)# 备份日志文件cp /path/to/your/java/logs/*.log "$BACKUP_DIR/$DATE.log"# 清空原始日志文件> /path/to/your/java/logs/*.log# 删除30天前的备份文件find "$BACKUP_DIR" -mtime +30 -type f -name "*.log" -exec rm -f {} ;sudo chmod +x /path/to/backup_java_logs.sh。crontab -e 添加以下行,实现每天凌晨0点自动执行:0 0 * * * /path/to/backup_java_logs.sh使用 journalctl 管理 systemd 日志若 Java 应用以 systemd 服务运行(如通过 systemctl start java-app),可使用 journalctl 管理其日志。
sudo journalctl --vacuum-time=1w(仅保留最近7天的日志)。sudo journalctl --vacuum-size=500M(日志总大小不超过500MB)。sudo journalctl --vacuum-time=0(清空所有日志)或直接删除日志文件(谨慎操作):sudo rm -rf /var/log/journal/*。调整 Java 应用日志框架配置(源头控制)通过 Java 日志框架(如 Log4j、Logback)的配置文件,设置日志轮转策略,从源头避免日志文件过大。
log4j.rootLogger=INFO, filelog4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=/var/log/java-app.loglog4j.appender.file.MaxFileSize=10MB# 单个日志文件最大10MBlog4j.appender.file.MaxBackupIndex=10 # 保留10个备份文件log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n<configuration><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/java-app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logs/java-app-%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留30天的日志 --></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>