1. 調整日志級別,減少不必要的日志輸出
日志級別決定了Tomcat記錄日志的詳細程度。根據環境需求調整級別,生產環境建議使用WARNING
或ERROR
(僅記錄關鍵錯誤和警告),開發調試時可臨時使用FINE
(記錄詳細調試信息)。修改$CATALINA_BASE/conf/logging.properties
文件,調整以下關鍵日志記錄器的級別:
org.apache.catalina.level=WARNING
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level=WARNING
、org.apache.catalina.manager.level=WARNING
java.sql.ConnectionPool.level=WARNING
2. 配置日志輪轉,防止日志文件過大
使用logrotate
工具定期切割、壓縮和清理Tomcat日志(如catalina.out
),避免單個文件占用過多磁盤空間。在/etc/logrotate.d/tomcat
中添加以下配置:
/opt/tomcat/logs/catalina.out {
daily # 每天輪轉一次
rotate 14 # 保留14天的備份
compress # 壓縮舊日志(如catalina.out.1.gz)
missingok # 若日志文件不存在也不報錯
notifempty # 若日志為空則不輪轉
copytruncate # 復制原日志后清空,避免重啟Tomcat
}
該配置會自動管理日志文件,確保存儲空間合理使用。
3. 優化訪問日志配置,控制訪問日志輸出
Tomcat的訪問日志(記錄HTTP請求詳情)默認可能記錄大量信息,需通過server.xml
調整AccessLogValve
配置:
rotatable="true"
,避免單個訪問日志文件過大;maxDays
屬性指定日志保留天數(如30天);pattern
屬性定義簡潔的日志格式(如common
格式僅記錄IP、時間、請求方法、URL、狀態碼等關鍵信息)。<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="${CATALINA_BASE}/logs"
prefix="localhost_access_log"
suffix=".txt"
rotatable="true"
maxDays="30"
pattern="common" />
若無需長期保留訪問日志,可注釋掉該配置以完全關閉訪問日志記錄。
4. 使用異步日志記錄,提升系統性能
同步日志記錄會阻塞Tomcat主線程,影響性能。從Tomcat 8開始,可使用異步日志處理器(AsyncFileHandler
)替代同步處理器(如FileHandler
)。修改logging.properties
文件,將日志處理器替換為異步模式:
# 替換同步處理器為異步處理器
1catalina.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
2localhost.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
3manager.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
4host-manager.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
# 配置異步處理器參數
org.apache.juli.AsyncFileHandler.level=FINE
org.apache.juli.AsyncFileHandler.directory=${catalina.base}/logs
org.apache.juli.AsyncFileHandler.prefix=catalina_async
org.apache.juli.AsyncFileHandler.suffix=.yyyy-MM-dd
org.apache.juli.AsyncFileHandler.bufferSize=8192 # 緩沖區大?。ㄗ止潱?/span>
異步日志通過緩沖區批量寫入磁盤,減少I/O阻塞,提升Tomcat處理請求的效率。
5. 自定義日志格式,提高日志可讀性
通過修改logging.properties
中的formatter
屬性,自定義日志輸出格式。常用格式化類及示例:
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
,可通過java.util.logging.SimpleFormatter.format
屬性調整格式(如%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s [%2$s] %5$s%6$s%n
,輸出時間、級別、類名、消息);java.util.logging.ConsoleHandler.formatter=org.apache.juli.OneLineFormatter
,將多行日志合并為一行,便于閱讀。java.util.logging.ConsoleHandler.formatter=org.apache.juli.OneLineFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s [%2$s] %5$s%6$s%n
自定義格式可根據需求突出關鍵信息(如時間、級別、類名),方便日志分析。
6. 限制特定組件的日志輸出,降低噪音
對于不需要詳細日志的組件(如第三方庫、啟動腳本),可將其日志級別設置為OFF
或WARNING
,減少無關日志的輸出。在logging.properties
中添加以下配置:
# 關閉特定組件的日志(如某第三方庫)
com.example.thirdparty.level=OFF
# 關閉Tomcat啟動相關的詳細日志
org.apache.catalina.startup.level=WARNING
通過針對性限制,可過濾掉大量無用日志,聚焦關鍵信息。