優化Ubuntu Tomcat日志記錄的方法
日志級別決定了Tomcat記錄日志的詳細程度,默認的INFO
級別會生成大量常規操作日志,增加磁盤占用和查找成本??筛鶕枨笳{整為更高級別:
WARNING
:僅記錄警告及以上級別的日志(如資源不足、配置問題),適合生產環境日常運行;ERROR
:僅記錄錯誤級別的日志(如應用崩潰、數據庫連接失?。?,進一步減少日志量;FATAL
:僅記錄致命錯誤(如JVM崩潰),適合極端性能敏感場景。conf/logging.properties
文件,調整核心日志記錄器的級別(如org.apache.catalina.level
、org.apache.catalina.startup.level
)。修改后需重啟Tomcat使配置生效。日志輪轉可自動分割、壓縮舊日志,避免單個日志文件過大占用磁盤空間。推薦使用系統自帶的logrotate
工具:
/etc/logrotate.d/tomcat
配置文件,添加以下內容(以Tomcat 9為例):/var/log/tomcat9/*.log {
daily # 每天輪轉一次
missingok # 日志文件丟失時不報錯
rotate 7 # 保留最近7個輪轉文件
compress # 壓縮舊日志(節省空間)
notifempty # 日志為空時不輪轉
create 640 tomcat adm # 新日志文件權限及屬主(需根據實際Tomcat用戶調整)
sharedscripts # 多個日志文件匹配時只執行一次postrotate
postrotate
if [ -f /var/run/tomcat9.pid ]; then
sudo kill -USR1 `cat /var/run/tomcat9.pid` # 通知Tomcat重新打開日志文件
fi
endscript
}
sudo logrotate -f /etc/logrotate.d/tomcat
,檢查是否有錯誤;logrotate
默認每天自動運行(可通過/etc/logrotate.conf
調整頻率)。同步日志記錄會阻塞應用線程,直到日志寫入磁盤,影響高并發場景下的性能。Tomcat 8及以上版本支持異步日志(AsyncFileHandler
):
conf/logging.properties
文件,將默認的ConsoleHandler
或FileHandler
替換為AsyncFileHandler
,例如:handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.rotatable = true
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 30
訪問日志可記錄用戶的HTTP請求信息(如IP、URL、響應狀態、耗時),用于分析用戶行為、排查性能問題。需在conf/server.xml
中配置AccessLogValve
:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" # 日志目錄(相對于Tomcat根目錄)
prefix="localhost_access_log" # 日志文件前綴
suffix=".txt" # 日志文件后綴
rotatable="true" # 啟用輪轉
maxDays="30" # 保留30天
pattern="%h %l %u %t "%r" %s %b" /> # 日志格式(包含IP、用戶、時間、請求、狀態碼、響應大?。?
pattern
常用變量說明:%h
(客戶端IP)、%r
(請求行,如GET /index.html HTTP/1.1
)、%s
(響應狀態碼)、%b
(響應大小,單位字節)。某些組件(如啟動過程、第三方庫)的詳細日志可能干擾問題排查,可通過logging.properties
限制其日志級別:
org.apache.catalina.startup
(啟動日志)設置為WARNING
,減少啟動時的冗余信息:org.apache.catalina.startup.level = WARNING
org.hibernate
)的日志級別設置為ERROR
,避免過多的SQL調試日志:org.hibernate.level = ERROR
原始日志數據難以直接用于分析,可使用工具進行集中管理和可視化:
grep
、awk
、tail -f
等命令行工具快速查找關鍵字(如grep "ERROR" /var/log/tomcat9/catalina.out
);