配置Tomcat的訪問日誌格式化輸出

來源:互聯網
上載者:User
本文描述如何配置tomcat的訪問日誌,按我們的要求輸出指定的日誌格式。 且在Nginx+Tomcat的配置環境中,如何讓Tomcat記錄訪客真實的IP地址。本文為原創內容,轉載請註明出處:JDiy官網

http://jdiy.net/read.jsp?id=y0hab3qs03 在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 &quot;%r&quot; %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 - 查詢字串(在前面加上一個“?”如果它存在,否則是一個Null 字元串
    %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地址了。

本文轉自: http://jdiy.net/read.jsp?id=y0hab3qs03

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.