1. 調整日志級別,減少不必要的日志輸出
Tomcat默認使用java.util.logging
框架,日志級別從低到高分為FINEST
、FINER
、FINE
、CONFIG
、INFO
、WARNING
、SEVERE
、OFF
。默認的INFO
級別會記錄大量常規運行信息(如啟動流程、請求處理細節),可通過修改conf/logging.properties
文件降低級別。例如,將全局日志級別設為WARNING
,或針對特定組件(如org.apache.catalina
、org.apache.coyote
)設置更高級別,過濾掉調試或冗余信息,顯著減少日志體積。
2. 啟用異步日志記錄,提升系統性能
同步日志記錄會阻塞應用線程,影響Tomcat處理請求的效率。從Tomcat 8開始,可使用org.apache.juli.AsyncFileHandler
替代默認的ConsoleHandler
或FileHandler
。在conf/logging.properties
中修改handlers
配置,將java.util.logging.ConsoleHandler
替換為org.apache.juli.AsyncFileHandler
,并保留原有的日志處理器(如1catalina.org.apache.juli.AsyncFileHandler
)。異步日志通過隊列緩沖日志事件,由后臺線程寫入文件,減少線程阻塞,提升吞吐量。
3. 配置日志輪轉策略,避免單個文件過大
當日志文件持續增長時,會占用大量磁盤空間,甚至導致磁盤寫滿??赏ㄟ^以下兩種方式實現輪轉:
conf/logging.properties
中,為FileHandler
設置limit
(單個文件最大大小,單位字節)和count
(保留的日志文件數量)。例如,1catalina.org.apache.juli.FileHandler.limit = 10000000
(約10MB)、1catalina.org.apache.juli.FileHandler.count = 5
,表示每個日志文件最大10MB,保留5個歷史文件。/etc/logrotate.d/tomcat
配置文件,設置每日輪轉(daily
)、保留7天日志(maxage 7
)、壓縮舊日志(compress
)、刪除超過30天的日志(maxsize 100M
或maxage 30
)。例如:/var/log/tomcat/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 tomcat tomcat
sharedscripts
postrotate
systemctl restart tomcat > /dev/null 2>&1 || true
endscript
}
4. 禁用不必要的日志輸出,聚焦關鍵信息
conf/server.xml
中注釋AccessLogValve
配置,或設置enabled="false"
。例如:<!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> -->
conf/logging.properties
中,將不需要詳細日志的組件(如org.apache.jasper
、org.apache.catalina.startup
)的日志級別調高。例如:org.apache.jasper.level = WARNING
org.apache.catalina.startup.level = WARNING
5. 集成成熟日志框架,提升靈活性
Tomcat原生日志框架功能有限,建議集成Log4j
或Logback
(更推薦),支持按日期/大小滾輪、動態調整級別、多輸出目標(如數據庫、消息隊列)。具體步驟:
log4j-core
、log4j-api
(或logback-classic
、logback-core
)的jar包復制到lib
目錄;conf/logging.properties
(避免沖突);log4j2.xml
)到conf
目錄,配置滾動策略、日志格式和輸出路徑。例如,Log4j2的滾動配置:<RollingFile name="FileAppender" fileName="logs/tomcat.log"
filePattern="logs/tomcat-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
6. 使用日志分析工具,挖掘日志價值
原始日志難以直接用于問題排查和性能分析,可通過以下工具提升日志利用率: