老大說這次要分析tomcat的訪問日志,用來做用戶訪問記錄什么的,好,開干。
可是……
找到Apache去,終于找到一點英文資料,貢獻于下,翻譯的不好,見諒啊
最近需要配置tomcat訪問日志,通過造訪他人的博客,再根據(jù)apache官方的一些文章,才逐漸清晰了許多
配置方法很簡單:在server.xml里的<host>標簽下加上
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
就可以了,下面咱們逐一分析各個參數(shù)。
className | 官方文檔上說了This MUST be set to org.apache.catalina.valves.AccessLogValve to use the default access log valve. &<60; 想配置訪問日志?這就必須得寫成這樣。 |
directory |
這個東西是日志文件放置的目錄,在tomcat下面有個logs文件夾,那里面是專門放置日志文件的,當然你也可以修改,我就給改成了D:\ |
prefix | 這個是日志文件的名稱前綴,我的日志名稱為localhost_access_log.2007-09-22.txt,前面的前綴就是這個localhost_access_log |
suffix | 這就是后綴名啦,可以改成別的 |
pattern |
這個是最主要的參數(shù)了,具體的咱們下面講,這個參數(shù)的內(nèi)容比較豐富。 |
resolveHosts | 如果這個值是true的話,tomcat會將這個服務(wù)器IP地址通過DNS轉(zhuǎn)換為主機名,如果是false,就直接寫服務(wù)器IP地址啦 |
rotatable |
默認為true,默認的設(shè)置使得你的tomcat生成的文件命為prefix(前綴)+.+時間(一般是按天算)+.+suffix(后綴),參照我的日志名就知道了:localhost_access_log.2007-09-22.txt 使用這個需要謹慎,因為你將其設(shè)置為false的話,tomcat會忽略時間,不會新生成文件,最后導(dǎo)致你的文件超級大,這樣生成的文件名就是:localhost_access_log.txt |
condition |
這個參數(shù)不太實用,可以設(shè)置任何值,比如咱們設(shè)置成condition="tkq",那么只有當ServletRequest.getAttribute("tkq")為空的時候,才會被記錄下來 |
fileDateFormat |
最后的一個參數(shù),很明白,這就是時間格式嘛,但是這個時間格式是針對日志文件起作用的,還記得咱們生成的日志文件全名么:localhost_access_log.2007-09-22.txt,這里面的2007-09-22就是這么來的,如果你想讓tomcat每小時生成一個日志文件,也很簡單,將這個值設(shè)置為:fileDateFormat=" yyyy-MM-dd.HH",當然也可以按分鐘生成什么的,自己改改吧 |
pattern這個參數(shù)的值比較多,咱們拿下來單獨說:
pattern可以設(shè)置成兩種方式,第一種是pattern="common",第二種是pattern="combined"
這就可以控制日志里面的格式,各位說了,pattern就這兩種?common和combined又是什么意思,具體是什么格式呢?
別著急,咱們一點一點看,其實pattern是可以設(shè)置的,common和combined只是集成了一些顯示方式,就是將顯示方式給組合了,pattern的實際值有如下幾種,都是
后面
一個字母,
前面
一個%百分號
咱們先貼出來我的日志里面的一條記錄,對應(yīng)著看
127.0.0.1 192.168.254.108 - -1 127.0.0.1 HTTP/1.1 - GET 80&<60; GET /rightmainima/leftbott4.swf HTTP/1.1 304 5563A67708646B6AA299C33D59BE132A [22/Sep/2007:10:08:52 +0800] - /rightmainima/leftbott4.swf localhost 0 0.000
%a |
127.0.0.1 |
|
192.168.254.108
|
%b |
這是發(fā)送信息的字節(jié)數(shù),不涵括http頭,如果字節(jié)數(shù)為0的話,顯示為- |
%B |
看tomcat的解釋,沒看出來與b%的區(qū)別,但我這里顯示為-1,沒想明白,望知道者告知,我把官方解釋貼出來吧 Bytes sent, excluding HTTP headers |
%h |
這個就是服務(wù)器名稱了,如果resolveHosts為false的話,這里就是IP地址了,我的日志里是127.0.0.1 |
%H |
訪問者使用的協(xié)議,這里是HTTP/1.1 |
%l |
這個也不太清楚,官方也說這個always return '-' 官方解釋:Remote logical username from identd (可能這樣翻譯:記錄瀏覽者進行身份驗證時提供的名字)(always returns '-') |
%m |
訪問的方式,是GET還是POST,我這是GET |
%p |
本地接收訪問的端口,呵呵,我這里是80啦 |
%q |
比如你訪問的是aaa.jsp?bbb=ccc,那么這里就顯示?bbb=ccc,明白了吧,這個q是querystring的意思 |
%r |
官方解釋:First line of the request (method and request URI),不是很明白 |
%s |
這個是http的狀態(tài),我這里返回的是304,咱們經(jīng)??匆娫L問某個網(wǎng)頁報錯誤500什么的,那也會返回500 |
%S |
用戶的session ID,這個session ID大家可以另外查一下詳細的解釋,反正每次都會生成不同的session ID |
%t |
這就是時間啦,好像有一個Common Log Format可以改,不過我沒找到 |
%u |
得到了驗證的訪問者,否則就是"-" |
%U |
訪問的URL地址,我這里是/rightmainima/leftbott4.swf |
%v |
服務(wù)器名稱,可能就是你url里面寫的那個吧,我這里是localhost |
%D |
官方解釋:Time taken to process the request, in millis,應(yīng)該是訪問發(fā)生的時間,以毫秒記 |
%T |
官方解釋:Time taken to process the request, in seconds,應(yīng)該是訪問發(fā)生的時間,以秒記 |
common的值:
%h %l %u %t %r %s %b
combined的值:
%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i
至于combined的值的最后兩個為什么會這樣,我也不太清楚…
這就是所有的參數(shù)了,歡迎交流探討!
這是官方的解釋地址:http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html
這個也可以看一看做參考:http://tomcat.apache.org/tomcat-5.0-doc/config/logger.html
還有這個:http://tomcat.apache.org/tomcat-5.0-doc/config/host.html
Apache官方對Tomcat訪問日志的配置介紹的并不詳細,大家可以參考Apache(web server)的訪問日志,兩者有相當多相似的地方