Linux環境下Tomcat日志分析指南
Tomcat的日志文件默認存儲在$CATALINA_HOME/logs目錄($CATALINA_HOME為Tomcat安裝根目錄),常見日志文件及作用如下:
使用tail -f命令實時跟蹤日志文件的新增內容(如catalina.out):
tail -f /path/to/tomcat/logs/catalina.out
按Ctrl+C退出實時查看。
使用less(支持上下翻頁、搜索)或more(逐頁查看)命令:
less /path/to/tomcat/logs/catalina.out
在less中,按/keyword可搜索關鍵詞(如ERROR),按q退出。
grep命令篩選ERROR、SEVERE或WARNING關鍵字(不區分大小寫):grep -i "ERROR" /path/to/tomcat/logs/catalina.out
sed命令提取指定時間范圍的日志(需日志中包含時間戳):sed -n '/2025-09-20 10:00:00/,/2025-09-20 11:00:00/p' /path/to/tomcat/logs/catalina.out
awk命令提取日志中的關鍵字段(如時間戳、狀態碼):awk '{print $1, $2, $9}' /path/to/tomcat/logs/access_log.2025-09-20.txt
上述命令提取訪問日志中的時間戳(第1列)、請求方法(第2列)和響應狀態碼(第9列)。當日志文件過大時,可使用logrotate工具自動按日期或大小分割日志,避免占用過多磁盤空間。編輯/etc/logrotate.d/tomcat文件,添加以下配置:
/path/to/tomcat/logs/*.log {
daily # 每天分割
missingok # 忽略缺失文件
rotate 7 # 保留最近7份
compress # 壓縮舊日志
notifempty # 空日志不分割
create 640 root adm # 創建新日志的權限
}
手動觸發分割:
logrotate /etc/logrotate.d/tomcat
grep+sort+uniq組合,統計錯誤出現的次數(按頻率排序):grep -i "ERROR" /path/to/tomcat/logs/catalina.out | awk '{print $1, $2, $3, $4, $5}' | sort | uniq -c | sort -nr
OutOfMemoryError:grep -i "OutOfMemoryError" /path/to/tomcat/logs/catalina.out
awk提取異常堆棧(以at開頭的行):grep -A 20 "java.lang.NullPointerException" /path/to/tomcat/logs/catalina.out | grep -B 20 -A 20 "^at "
上述命令提取NullPointerException及其前后20行的堆棧信息。對于大規模日志或需要可視化的場景,推薦使用以下工具:
catalina.out、access_log);ERROR日志超過閾值時發送郵件)。通過修改Tomcat的conf/logging.properties文件,可調整日志級別、格式和輸出位置:
org.apache.catalina的級別從INFO改為FINE(記錄更詳細信息),但會增加日志量:org.apache.catalina.level = FINE
AccessLogValve配置(在server.xml中),調整訪問日志的字段(如添加客戶端User-Agent):<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b "%{User-Agent}i"" />
上述pattern中,%{User-Agent}i表示記錄客戶端瀏覽器信息。ERROR日志定位應用崩潰、數據庫連接失敗等問題;pattern中添加%D,記錄請求處理時間)、吞吐量(每秒請求數);