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应用,能有效管理其控制台输出日志。