CentOS系统Java日志清理策略

logrotate是CentOS自带的日志管理工具,可自动完成日志轮转、压缩、删除等操作,适用于大多数Java应用(如Tomcat、Spring Boot)的日志文件(如*.log)。
sudo yum install logrotate命令安装。/etc/logrotate.d/java文件,添加以下规则(以Java日志目录/var/log/java-app/为例):/var/log/java-app/*.log {daily# 按天轮转(可选:weekly/monthly)rotate 7 # 保留7天日志(可根据磁盘空间调整,如30天)compress # 压缩旧日志(节省空间,默认使用gzip)missingok# 日志文件不存在时不报错notifempty # 日志为空时不轮转create 0644 root root# 轮转后创建新日志文件,设置权限}logrotate -d /etc/logrotate.d/java测试配置是否正确;通过sudo systemctl reload logrotate重新加载配置使规则生效。通过Log4j、Logback等日志框架的配置文件,实现应用自身日志的轮转和清理,避免日志无限增长。
logback.xml):<configuration><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/var/log/java-app/app.log</file><!-- 当前日志文件路径 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>/var/log/java-app/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>log4j2.xml):<Configuration status="WARN"><Appenders><RollingFile name="RollingFile" fileName="/var/log/java-app/app.log" filePattern="/var/log/java-app/app-%d{yyyy-MM-dd}.log.gz"><Policies><TimeBasedTriggeringPolicy /><!-- 按天触发轮转 --></Policies><DefaultRolloverStrategy max="30" /><!-- 最多保留30个文件 --></RollingFile></Appenders><Loggers><Root level="INFO"><AppenderRef ref="RollingFile" /></Root></Loggers></Configuration>以上配置均实现每日滚动日志、保留30天历史日志,并自动压缩旧日志(Logback默认压缩,Log4j2需添加.gz后缀)。当Java日志文件异常增长(如超过1GB)时,可通过以下命令快速清理:
find /var/log/java-app/ -type f -name "*.log" -mtime +30 -exec rm -f {} ;> /var/log/java-app/app.log注意:手动清理前需确认日志文件未被应用写入,避免数据丢失。通过降低日志级别,减少不必要的日志输出(如将DEBUG调整为INFO或WARN),从源头上控制日志文件大小。
logback.xml):<root level="WARN"><!-- 将全局级别设为WARN,仅输出警告及以上级别日志 --><appender-ref ref="FILE" /></root>log4j2.xml):<Root level="WARN"><AppenderRef ref="RollingFile" /></Root>适用于生产环境,避免过多的DEBUG日志占用磁盘空间。若Java应用以systemd服务运行(如tomcat.service),可通过journalctl工具管理其日志:
sudo journalctl --vacuum-time=1w# 只保留近1周日志sudo journalctl --vacuum-size=500M# 只保留500MB以内日志journalctl -u java-app.service -f# 实时查看指定服务的日志此方法适用于通过systemd启动的Java应用,能有效管理其控制台输出日志。