Tomcat 中 catalina.out纫塌、catalina.log、localhost.log 和 access_log 的區(qū)別

打開 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 &quot;%r&quot; %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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鸽粉,一起剝皮案震驚了整個濱河市斜脂,隨后出現的幾起案子,更是在濱河造成了極大的恐慌触机,老刑警劉巖帚戳,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異儡首,居然都是意外死亡片任,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門蔬胯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來对供,“玉大人,你說我怎么就攤上這事氛濒〔。” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵舞竿,是天一觀的道長京景。 經常有香客問我,道長骗奖,這世上最難降的妖魔是什么确徙? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮执桌,結果婚禮上鄙皇,老公的妹妹穿的比我還像新娘。我一直安慰自己鼻吮,他們只是感情好,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布较鼓。 她就那樣靜靜地躺著椎木,像睡著了一般。 火紅的嫁衣襯著肌膚如雪博烂。 梳的紋絲不亂的頭發(fā)上香椎,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音禽篱,去河邊找鬼畜伐。 笑死,一個胖子當著我的面吹牛躺率,可吹牛的內容都是我干的玛界。 我是一名探鬼主播万矾,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慎框!你這毒婦竟也來了良狈?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤笨枯,失蹤者是張志新(化名)和其女友劉穎薪丁,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體馅精,經...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡严嗜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了洲敢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漫玄。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沦疾,靈堂內的尸體忽然破棺而出称近,到底是詐尸還是另有隱情,我是刑警寧澤哮塞,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布刨秆,位于F島的核電站,受9級特大地震影響忆畅,放射性物質發(fā)生泄漏衡未。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一家凯、第九天 我趴在偏房一處隱蔽的房頂上張望缓醋。 院中可真熱鬧,春花似錦绊诲、人聲如沸送粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抗俄。三九已至,卻和暖如春世舰,著一層夾襖步出監(jiān)牢的瞬間动雹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工跟压, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胰蝠,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像茸塞,于是被迫代替她去往敵國和親躲庄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內容