tomcat 訪問日誌配置
阿新 • • 發佈:2019-02-09
在tomcat的server.xml檔案中,host主機配置區域找到類似如下(紅色部分)即為訪問日誌的配置:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> <!--...部分內容略..-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host> 其中的directory用於指定日誌的存放路徑,預設位於tomcat的logs目錄中,例如我們可以修改成: directory="c:/wwwlogs" 使日誌放到c:\wwwlogs目錄中去。 其中的prefix和suffic分別用於指定日誌檔案的字首和字尾,不用我多說。 現在我們主要來看一下pattern配置段,它用於指定日誌的輸出格式。有效的日誌格式模式可以參見下面內容,如下字串,其對應的資訊由指定的響應內容取代:
%a - 遠端IP地址
%A - 本地IP地址
%b - 傳送的位元組數,不包括HTTP頭,或“ - ”如果沒有傳送位元組
%B - 傳送的位元組數,不包括HTTP頭
%h - 遠端主機名
%H - 請求協議
%l (小寫的L)- 遠端邏輯從identd的使用者名稱(總是返回' - ')
%m - 請求方法
%p - 本地埠
%q - 查詢字串(在前面加上一個“?”如果它存在,否則是一個空字串
%r - 第一行的要求
%s - 響應的HTTP狀態程式碼
%S - 使用者會話ID
%t - 日期和時間,在通用日誌格式 %u - 遠端使用者身份驗證
%U - 請求的URL路徑
%v - 本地伺服器名
%D - 處理請求的時間(以毫秒為單位)
%T - 處理請求的時間(以秒為單位)
%I (大寫的i) - 當前請求的執行緒名稱
此外,您可以指定以下別名來設定為普遍使用的模式之一:
common - %h %l %u %t "%r" %s %b
combined - %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"
另外,還可以將request請求的查詢引數、session會話變數值、cookie值或HTTP請求/響應頭內容的變數值等內容寫入到日誌檔案。
它仿照了apache的語法:
%{XXX}i xxx代表傳入的頭(HTTP Request) %{XXX}o xxx代表傳出的響應頭(Http Resonse)
%{XXX}c xxx代表特定的Cookie名
%{XXX}r xxx代表ServletRequest屬性名 %{XXX}s xxx代表HttpSession中的屬性名 舉例說明:
例如我們在架設jsp伺服器時,採用Nginx+Tomcat這種配置時,將請求由Nginx轉發給Tomcat,當需要在tomcat的日誌中記錄來訪者的真實IP地址資訊時,我們就需要做一點點有別於其它的特殊匹配了,要不然tomcat記錄的訪客IP全都是127.0.0.1, 這是因為所有的請求都是由Nginx前端伺服器轉發而來的,而前端伺服器對於tomcat來說就是127.0.0.1。
下面,我們來看一下如何讓tomcat記錄使用者的真實IP地址:
一、配置Nginx轉發IP頭:
在Nginx的server主機配置段中新增:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; 說明:上面兩行用於向tomcat傳送真實的遠端主機名和IP地址。其中的Host代表主機名, X-Real-IP代表主機IP,對於HTTP頭部內容,這些變數是不區分大小寫的。 二、配置Tomcat日誌記錄客戶真實IP:
在Tomcat中要記錄來訪者真實IP,大家參考上面所述的tomcat日誌配置語法,只需在日誌模式中新增如下模式就行了:%{X-Real-IP}i
如下面完整的Tomcat日誌配置段:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="c:/wwwlogs/" prefix="cluster." suffix=".log"
pattern="%{X-Real-IP}i %u %t %r %s %b" resolveHosts="false" />
注意:上兩兩處修改後,您應該重新啟動Nginx和Tomcat服務,以使您的修改生效。這樣,當有新的請求過來時,便可以在Tomcat日誌檔案中記錄訪客的真實IP地址了。
unpackWARs="true" autoDeploy="true"> <!--...部分內容略..-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host> 其中的directory用於指定日誌的存放路徑,預設位於tomcat的logs目錄中,例如我們可以修改成: directory="c:/wwwlogs" 使日誌放到c:\wwwlogs目錄中去。 其中的prefix和suffic分別用於指定日誌檔案的字首和字尾,不用我多說。 現在我們主要來看一下pattern配置段,它用於指定日誌的輸出格式。有效的日誌格式模式可以參見下面內容,如下字串,其對應的資訊由指定的響應內容取代:
%a - 遠端IP地址
%A - 本地IP地址
%b - 傳送的位元組數,不包括HTTP頭,或“ - ”如果沒有傳送位元組
%B - 傳送的位元組數,不包括HTTP頭
%h - 遠端主機名
%H - 請求協議
%l (小寫的L)- 遠端邏輯從identd的使用者名稱(總是返回' - ')
%m - 請求方法
%p - 本地埠
%q - 查詢字串(在前面加上一個“?”如果它存在,否則是一個空字串
%r - 第一行的要求
%s - 響應的HTTP狀態程式碼
%S - 使用者會話ID
%t - 日期和時間,在通用日誌格式 %u - 遠端使用者身份驗證
%U - 請求的URL路徑
%v - 本地伺服器名
%D - 處理請求的時間(以毫秒為單位)
%T - 處理請求的時間(以秒為單位)
%I (大寫的i) - 當前請求的執行緒名稱
此外,您可以指定以下別名來設定為普遍使用的模式之一:
common - %h %l %u %t "%r" %s %b
combined - %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"
另外,還可以將request請求的查詢引數、session會話變數值、cookie值或HTTP請求/響應頭內容的變數值等內容寫入到日誌檔案。
它仿照了apache的語法:
%{XXX}i xxx代表傳入的頭(HTTP Request) %{XXX}o xxx代表傳出的響應頭(Http Resonse)
%{XXX}c xxx代表特定的Cookie名
%{XXX}r xxx代表ServletRequest屬性名 %{XXX}s xxx代表HttpSession中的屬性名 舉例說明:
proxy_set_header X-Real-IP $remote_addr; 說明:上面兩行用於向tomcat傳送真實的遠端主機名和IP地址。其中的Host代表主機名, X-Real-IP代表主機IP,對於HTTP頭部內容,這些變數是不區分大小寫的。 二、配置Tomcat日誌記錄客戶真實IP: