Tomcat:如何配置和使用Tomcat訪問日誌

配置位置在log下的server.xml,(tomcat容器)

<Engine defaultHost="localhost" name="Catalina"> 
<Host appBase="webapps" name="localhost"> 
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/> 
<Valve className="org.apache.catalina.valves.AccessLogValve" fileDateFormat="yyyy-MM-dd" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %{x-jphone-uid}i %{x-up-subno}i" prefix="localhost_access_log." suffix=".txt" directory="/var/log/accesslog" condition="drop"/> 
<Context path="" docBase="cn_issue" debug="0"/> 
</Host> 
<Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/> 
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"/> 
</Engine>

以下是摘抄正文

original link:http://forum.ospod.com/post-25088-1.fhtml;jsessionid=3361F472A5E12B9B9BEA1632EC50603A

Access Log Valve用來創建日誌文件,格式與標準的web server日誌文件相同。可以使用用日誌分析工具對日誌進行分析,跟蹤頁面點擊次數、用戶會話的活動等。Access Log Valve的很多配置和行爲特性與File Logger相同,包括每晚午夜自動切換日誌文件。Access Log Valve可以和任何Catalina容器關聯,記錄該容器處理的所有請求。 
例子如下: 

directory="logs" prefix="localhost_access_log." suffix=".txt" 
pattern="%{X-Forwarded-For-Pound}i %l %u %t "%r" %s %b %T "%{HTTP_X_UP_CALLING_LINE_ID}i" "%{x-up-calling-line-id}i" "%{User-Agent}i"" resolveHosts="false"/> 


className 實現的Java類名。必須被設置成org.apache.catalina.valves.AccessLogValve。 
directory 存放日誌文件的目錄,可以是相對路徑或者絕對路徑。如果使用相對路徑,是指相對於 $CATALINA_HOME的路徑。如果不指定directory屬性,缺省值是"logs"(相對於 $CATALINA_HOME) 
pattern 需要記錄的請求/響應不同信息域的格式佈局。如果是"common"或者"combine",說明選擇標準格式。下面會有關於配置這個屬性的更多信息。 
prefix 日誌文件名的前綴。如果沒有指定,缺省值是"access_log."。如果不想使用前綴,使用長度爲0的字符串。 

resolveHosts 將遠端主機的IP地址通過DNS查詢轉換成主機名,設爲true。如果爲false,忽略DNS查詢,報告遠端的IP地址。 

suffix 日誌文件名的後綴。如果沒有指定,缺省值是""。如果不想使用後綴,使用長度爲0的字符串。 

rotatable 缺省值爲true,用來決定日誌是否翻轉的標誌。如果爲false,日誌文件永遠不翻轉,並且忽略fileDataFormat。要謹慎使用。 

condition 打開條件日誌。如果設置了這個屬性,只有在ServletRequest.getAttribute()是null的時候,纔會爲請求創建日誌。比如,如果 condition設爲junk,則只有在Servlet.getAttribute("junk")==null的時候,纔會記錄這個請求。使用過濾器,可以很容易設置(或者取消設置)不同請求的屬性。 
fileDateFormat 允許在日誌文件名稱中使用定製的日期格式。日誌的格式也決定了日誌文件翻轉的頻率。如果想每個小時翻轉一次,將這個值設爲yyyy-MM-dd.HH


pattern屬性值由字符串常量和pattern標識符加上前綴"%"組合而成。pattern標識符加上前綴"%",用來代替當前請求/響應中的對應的變量值。目前支持如下的pattern:

  • %a - 遠端IP地址
  • %A - 本地IP地址
  • %b - 發送的字節數,不包括HTTP頭,如果爲0,使用"-"
  • %B - 發送的字節數,不包括HTTP頭
  • %h - 遠端主機名(如果resolveHost=false,遠端的IP地址)
  • %H - 請求協議
  • %l - 從identd返回的遠端邏輯用戶名(總是返回 '-')
  • %m - 請求的方法(GET,POST,等)
  • %p - 收到請求的本地端口號
  • %q - 查詢字符串(如果存在,以 '?'開始)
  • %r - 請求的第一行,包含了請求的方法和URI
  • %s - 響應的狀態碼
  • %S - 用戶的session ID
  • %t - 日誌和時間,使用通常的Log格式
  • %u - 認證以後的遠端用戶(如果存在的話,否則爲'-')
  • %U - 請求的URI路徑
  • %v - 本地服務器的名稱
  • %D - 處理請求的時間,以毫秒爲單位
  • %T - 處理請求的時間,以秒爲單位

結果舉例如下: 
- - - [29/Aug/2005:09:34:48 +0800] "GET /waptest/server?productid=qqportal&actionid=index&user_type=1&station=tencent&mid=12345678908888&mobile_no=13724179457&qazxcdew=1 HTTP/1.1" 404 710 0.015 "-" "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.11 [zh-cn]" 

- - - [29/Aug/2005:10:27:29 +0800] "OPTIONS / HTTP/1.1" 404 668 0.203 "-" "-" "Microsoft-WebDAV-MiniRedir/5.1.2600"

 附錄:server.xml 

<?xml version='1.0' encoding='utf-8'?>
<Server>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443">
    </Connector>
    <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
    </Connector>
    <Engine defaultHost="localhost" name="Catalina">
      <Host appBase="webapps" name="localhost">
        <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" fileDateFormat="yyyy-MM-dd" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %{x-jphone-uid}i %{x-up-subno}i" prefix="localhost_access_log." suffix=".txt" directory="/log/accesslog" condition="drop"/>
    <Context path="" docBase="cn_issue" debug="0"/>
      </Host>
      <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
    </Engine>
  </Service>
</Server>

發佈了49 篇原創文章 · 獲贊 15 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章