打開 Tomcat 安裝目錄中的 log 文件夾讲弄,我們可以看到很多日志文件措左,這篇文章就來介紹下這些日記文件的具體區(qū)別。
catalina.out 日志#
catalina.out 日志文件是 Tomcat 的標準輸出(stdout)和標準出錯(stderr)輸出的“目的地”避除。我們在應用里使用System.out打印的內容都會輸出到這個日志文件中怎披。另外胸嘁,如果我們在應用里使用其他的日志框架,配置了向 Console 輸出日志凉逛,則也會輸出到這個文件性宏。
這個日志設定是在 Tomcat 的啟動腳本中指定的。下面是 Linux 下 Tomcat 的一段啟動腳本:
Copy
shift
? # 創(chuàng)建 catalina.out 日志文件
? touch "$CATALINA_BASE"/logs/catalina.out
? if [ "$1" = "-security" ] ; then
? ? echo "Using Security Manager"
? ? shift
? ? "$_RUNJAVA" $JAVA_OPTS "$LOGGING_CONFIG" $CATALINA_OPTS \
? ? ? -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
? ? ? -Djava.security.manager \
? ? ? -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
? ? ? -Dcatalina.base="$CATALINA_BASE" \
? ? ? -Dcatalina.home="$CATALINA_HOME" \
? ? ? -Djava.io.tmpdir="$CATALINA_TMPDIR" \
? ? ? org.apache.catalina.startup.Bootstrap "$@" start \
? ? ? # 向 catalina.out 中追加日志內容
? ? ? >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
? ? if [ ! -z "$CATALINA_PID" ]; then
? ? ? ? echo $! > $CATALINA_PID
? ? ? fi
上面的腳本比較簡單状飞,就不深入介紹了毫胜。如果我們用 Windows 上的 Tomcat 的話,你會發(fā)現并沒有 catalina.out 這個日志文件生成昔瞧。但是 Tomcat 啟動的時候會彈出一個新的終端來顯示日志指蚁,這個也是在啟動腳本中設置的。下面是一個 Window 下一個真實的啟動命令:
Copy
"start "Tomcat" "C:\Program Files\Java\jdk1.8.0_73\bin\java.exe" -Djava.util.logging.config.file="D:\software\tomcat-64\apache-tomcat-9.0.0.M21-windows-x64 (1)\apache-tomcat-9.0.0.M21\conf\logging.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager? "-Djdk.tls.ephemeralDHKeySize=2048" -Djava.protocol.handler.pkgs=org.apache.catalina.webresources? -classpath "D:\software\tomcat-64\apache-tomcat-9.0.0.M21-windows-x64 (1)\apache-tomcat-9.0.0.M21\bin\bootstrap.jar;D:\software\tomcat-64\apache-tomcat-9.0.0.M21-windows-x64 (1)\apache-tomcat-9.0.0.M21\bin\tomcat-juli.jar" -Dcatalina.base="D:\software\tomcat-64\apache-tomcat-9.0.0.M21-windows-x64 (1)\apache-tomcat-9.0.0.M21" -Dcatalina.home="D:\software\tomcat-64\apache-tomcat-9.0.0.M21-windows-x64 (1)\apache-tomcat-9.0.0.M21" -Djava.io.tmpdir="D:\software\tomcat-64\apache-tomcat-9.0.0.M21-windows-x64 (1)\apache-tomcat-9.0.0.M21\temp" org.apache.catalina.startup.Bootstrap arg1 arg2 start"
上面命令中開頭的start Tomcat的意思是重新開啟一個叫 Tomcat 的窗口執(zhí)行 Java 命令自晰。這個啟動命令中并沒有創(chuàng)建 catalina.out 這個日志文件凝化,所以我們在 Window 平臺上并不能看到 catalina.out 這個文件。
如果你也想要創(chuàng)建這個日志文件的話酬荞,可以修改啟動腳本搓劫。
Copy
:doStart
shift
if "%TITLE%" == "" set TITLE=Tomcat
# set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
# 第一步:不再重新開啟一個 Tomcat 終端
set _EXECJAVA= %_RUNJAVA%
將日志追加到 catalina.out 日志文件。
Copy
rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% >>%CATALINA_HOME%/logs/catalina.out
goto end
:doSecurity
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doSecurityJpda
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %JPDA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
注意點:隨著系統(tǒng)上線的時間越來越長混巧, catalina.out 會變得很大枪向,所以最好還是要設定一些定時任務來清理歸檔這個日志文件。
catalina.YYYY-MM-DD.log 日志#
catalina.{yyyy-MM-dd}.log 是 Tomcat 自己運行的一些日志咧党,主要記錄 Tomcat 在啟動和暫停時的運行內容秘蛔。
localhost.YYYY-MM-DD.log#
localhost.{yyyy-MM-dd}.log 主要是應用初始化(listener, filter, servlet)未處理的異常最后被 Tomcat 捕獲而輸出的日志,它也是包含 Tomcat 的啟動和暫停時的運行日志,但它沒有 catalina.YYYY-MM-DD.log 日志全。
localhost_access_log.YYYY-MM-DD.txt#
Tomcat 的請求訪問日志傍衡,請求的時間深员,請求的類型,請求的資源和返回的狀態(tài)碼都有記錄蛙埂。配置這個日志非常有必要倦畅,可以讓我們清楚的看清請求的狀況。
1. 傳統(tǒng)配置方式
默認配置在 server.xml 中绣的,如下:
Copy
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
? ? ? ? ? ? ? prefix="localhost_access_log" suffix=".txt"
? ? ? ? ? ? ? pattern="%h %l %u %t "%r" %s %b" />
注意叠赐,xml中的 " 代表 " 具體原因自行查閱
在該配置下格式為
Copy
192.168.10.66 - - [26/Feb/2020:17:52:00 +0800] "GET /getIndex HTTP/1.1" 200 54 1
官方支持的配置如下:
Copy
%a - 遠端訪問的客戶端IP
%A - Server服務所在的服務器自身IP
%b - 發(fā)送的字節(jié)數,不包含httpHeader 如果是0的話顯示為 -
%B - 發(fā)送的字節(jié)數屡江,不包含httpHeader
%h - 遠端的客戶端服務器名稱(如果resolve host為false則即為IP)
%H - 請求協(xié)議名稱
%l - 遠端請求用來認證的用戶名 (一直是 '-')
%m - 請求方法 (GET, POST, 等.)
%p - 接收請求的本地端口
%q - 請求中的查詢參數 (如果有的話芭概,以?開頭) (例如 /getIndex?id=3,其中'?id=3'就是)
%r - 請求的第一行 (方法和請求地址)
%s - 返回結果對應的http code
%S - 用戶的 session id
%t - 日期和時間惩嘉,使用普通Log形式展示
%u - 遠端訪問的已認證的用戶 (如果有的話), 沒有的話顯示 '-'
%U - 請求的url路徑
%v - 本地服務所在服務器名稱
%D - 處理這個請求的時間, 毫秒表示
%T - 處理這個請求的時間, 以秒表示
%I - 當前請求的線程名稱 (可以在調用棧中用來做比較和查詢)
2. Spring Boot 中的配置
在 Spring Boot 中使用的是內嵌的 Tomcat谈山,也支持對 access_log的配置。
Copy
server:
? tomcat:
? ? #最好進行這段配置宏怔,默認會在tmp目錄下創(chuàng)建奏路,Linux有時會有定時任務刪除tmp目錄下的內容
? ? basedir: my-tomcat
? ? accesslog:
? ? ? enabled: true
? ? ? pattern: '%t %a "%r" %s %S (%b M) (%D ms)'
Spring Boot 中關于 access_log 的配置項還有很多畴椰,用的時候可以自行參考官方文檔。
龍華大道1號http://www.kinghill.cn/Dynamics/2106.html