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應用,能有效管理其控制臺輸出日志。