Tomcat日志過大清理優化方法
logrotate是Linux系統自帶的日志管理工具,可自動輪轉、壓縮、刪除舊日志,避免單個文件過大。配置步驟如下:
sudo apt-get install logrotate
(Ubuntu/Debian)或sudo yum install logrotate
(CentOS/RHEL)。sudo nano /etc/logrotate.d/tomcat
,添加以下內容(按需調整參數):/usr/local/tomcat/logs/catalina.out {
daily # 每天輪轉
rotate 7 # 保留最近7天日志
compress # 壓縮舊日志(節省空間)
missingok # 若日志不存在也不報錯
notifempty # 若日志為空則不輪轉
copytruncate # 復制原日志后清空,避免重啟Tomcat
}
sudo logrotate -d /etc/logrotate.d/tomcat
(模擬運行,不實際執行);手動觸發輪轉:sudo logrotate /etc/logrotate.d/tomcat
。通過修改Tomcat的conf/logging.properties
文件,設置日志文件的大小限制和滾動策略,適用于catalina、localhost等日志:
1catalina.org.apache.juli.FileHandler
),修改以下參數:1catalina.org.apache.juli.FileHandler.level = INFO # 設置日志級別(減少DEBUG/TRACE輸出)
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs # 日志目錄
1catalina.org.apache.juli.FileHandler.prefix = catalina. # 日志前綴
1catalina.org.apache.juli.FileHandler.maxFileSize = 10MB # 單個日志文件最大大小
1catalina.org.apache.juli.FileHandler.maxDays = 30 # 保留最近30天日志
cronolog可根據時間(如日期)實時切割日志文件,避免單個文件無限增長,適合高流量場景:
sudo apt-get install cronolog
(Ubuntu/Debian)或sudo yum install cronolog
(CentOS/RHEL)。bin/catalina.sh
),找到CATALINA_OUT
變量設置,替換為:if [ -z "$CATALINA_OUT" ]; then
CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" # 按日期命名日志文件
fi
catalina.2025-10-09.out
、catalina.2025-10-10.out
等形式。通過腳本批量刪除過期日志,配合cron定時任務實現自動化:
/usr/local/tomcat/bin/clear_tomcat_logs.sh
),內容如下:#!/bin/bash
LOG_PATH="/usr/local/tomcat/logs"
# 刪除7天前的.log和.txt文件
find "$LOG_PATH" -type f -name "*.log" -mtime +7 -exec rm -f {} \;
find "$LOG_PATH" -type f -name "*.txt" -mtime +7 -exec rm -f {} \;
# 清空catalina.out(保留文件但清空內容)
echo "" > "$LOG_PATH/catalina.out"
sudo chmod +x /usr/local/tomcat/bin/clear_tomcat_logs.sh
。crontab -e
,添加以下內容:0 1 * * * /usr/local/tomcat/bin/clear_tomcat_logs.sh
過高的日志級別(如DEBUG)會生成大量無用日志,需調整為更嚴格的級別:
conf/logging.properties
文件,調整根日志級別(如INFO
或WARN
):org.apache.catalina.level = INFO # Tomcat核心日志
com.example.app.level = WARN # 應用層日志(替換為你的包名)
conf/server.xml
,注釋掉AccessLogValve
配置:<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
-->
logging.properties
將其級別設為ERROR
或OFF
。Tomcat默認使用Java Util Logging(JULI),功能有限,可替換為Log4j或Logback,支持更靈活的日志管理(如按大小/日期分割、遠程日志傳輸):
log4j-1.2.17.jar
)和適配器(tomcat-juli-adapters.jar
),放入lib
目錄。conf/logging.properties
文件。conf/context.xml
中添加swallowOutput="true"
:<Context swallowOutput="true">
conf/log4j.properties
文件,配置滾動策略(示例):log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${catalina.base}/logs/tomcat.log
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n