tomcat Access Log 統計相應時間
Access Log Valve用來建立日誌檔案,格式與標準的web server日誌檔案相同。可以使用用日誌分析工具對日誌進行分析,跟蹤頁面點選次數、使用者會話的活動等。Access Log Valve的很多配置和行為特性與File Logger相同,包括每晚午夜自動切換日誌檔案。Access Log Valve可以和任何Catalina容器關聯,記錄該容器處理的所有請求。
例子如下:
<Valve className="org.apache.catalina.valves.AccessLogValve"
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 - 處理請求的時間,以秒為單位
執行結果
一是執行中的日誌,它主要記錄執行的一些資訊,尤其是一些異常錯誤日誌資訊
二是訪問日誌資訊,它記錄的訪問的時間,IP,訪問的資料等相關資訊。
現在我來和大家介紹一下利用tomcat產生的訪問日誌資料,我們能做哪些有效的分析資料?
首先是配置tomcat訪問日誌資料,預設情況下訪問日誌沒有開啟,配置的方式如下:
編輯${catalina}/conf/server.xml檔案.注:${catalina}是tomcat的安裝目錄
把以下的註釋(<!-- -->)去掉即可。
<!--
<ValveclassName="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log."suffix=".txt"
pattern="common" resolveHosts="false"/>
-->
其中 directory是產生的目錄 tomcat安裝${catalina}作為當前目錄
pattern表示日誌生產的格式,common是tomcat提供的一個標準設定格式。其具體的表示式為 %h %l %u %t "%r"%s %b
但本人建議採用以下具體的配置,因為標準配置有一些重要的日誌資料無法生。
%h %l %u %t "%r" %s %b %T
具體的日誌產生樣式說明如下(從官方文件中摘錄):
* %a - Remote IP address
* %A - Local IP address
* %b - Bytes sent, excluding HTTP headers, or '-' if zero
* %B - Bytes sent, excluding HTTP headers
* %h - Remote host name (or IP address if resolveHosts isfalse)
* %H - Request protocol
* %l - Remote logical username from identd (always returns'-')
* %m - Request method (GET, POST, etc.)
* %p - Local port on which this request was received
* %q - Query string (prepended with a '?' if it exists)
* %r - First line of the request (method and request URI)
* %s - HTTP status code of the response
* %S - User session ID
* %t - Date and time, in Common Log Format
* %u - Remote user that was authenticated (if any), else '-'
* %U - Requested URL path
* %v - Local server name
* %D - Time taken to process the request, in millis
* %T - Time taken to process the request, in seconds
There is also support to write information from the cookie, incoming header, theSession or something else in the ServletRequest. It is modeled after the apachesyntax:
* %{xxx}i for incoming headers
* %{xxx}c for a specific cookie
* %{xxx}r xxx is an attribute in the ServletRequest
* %{xxx}s xxx is an attribute in the HttpSession
現在我們回頭再來看一下下面這個配置 %h %l %u %t "%r"%s %b %T 生產的訪問日誌資料,我們可以做哪些事?
先看一下,我們能得到的資料有:
* %h 訪問的使用者IP地址
* %l 訪問邏輯使用者名稱,通常返回'-'
* %u 訪問驗證使用者名稱,通常返回'-'
* %t 訪問日時
* %r 訪問的方式(post或者是get),訪問的資源和使用的http協議版本
* %s 訪問返回的http狀態
* %b 訪問資源返回的流量
* %T 訪問所使用的時間
在tomcat下的conf/server.xml中的<Host>段加上accessLog <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="access_log" fileDateFormat="yyyy-MM-dd.HH" suffix=".log" rotatable="true" resolveHosts="false" pattern="%a %t %H %S %r %B %D %s"/> 在做壓力測試的時候,請將webapps專案下的log4j.xml檔案的日誌級別改為WARN,並且裡面的事件日誌也改為WARN,減少日誌輸出量,免得影響測試. accesslog始終開啟,這個不會影響。壓力測完了,再把事件日誌開啟。