LogFormat是apache中日志記錄的一個格式了,我們使用apache如果要開啟日志就會用到LogFormat,下面給大家介紹一下LogFormat一些參數。
例如下面的代碼:
- ErrorLog "xxx/log/error2.log "
- LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
- CustomLog "xxxx/log/logweb1122.log" combined
生成的日志:
- /database/110/0db40c45cfdb980cdffa1d0cffb2891c.htm HTTP/1.1" 200 2992 "-" "YisouSpider"
- 118.186.139.156 - - [22/Nov/2013:13:42:02 +0800] "GET /favicon.ico HTTP/1.1" 200 1620 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
- 223.241.162.53 - - [22/Nov/2013:13:42:02 +0800] "GET /wy/jquery/37402.htm HTTP/1.1" 200 2910 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"
- 42.120.160.81 - - [22/Nov/2013:13:42:02 +0800] "GET /so/cookie%CA%A7%D0%A7 HTTP/1.1" 200 4227 "-" "YisouSpider"
- 42.156.136.81 - - [22/Nov/2013:13:42:03 +0800] "GET /show.php/111cn_103_cn.html?id=103&page=5 HTTP/1.1" 301 5629 "-" "YisouSpider"
- 220.181.108.121 - - [22/Nov/2013:13:42:03 +0800] "GET /so/IN HTTP/1.1" 200 7223 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
- 42.120.161.81 - - [22/Nov/2013:13:42:03 +0800] "GET /list-103-5/ HTTP/1.1" 200 5616 "-" "YisouSpider"
看了半天參數都不明白,后來找到一些關于LogFormat記錄格式的參數
在apache的配置文件httpd.conf里一般都有類似于LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" common 的日志記錄格式設置,那么這種格式里的各個參數都代表什么意思呢,怎樣設置才能完全掌握網站的訪問情況呢?下面我就參數意思,簡單說下。
請求本身的情況將通過在格式字符串中放置各種"%"轉義符的方法來記錄,它們在寫入日志文件時,根據下表的定義進行轉換:
%a 遠端IP地址
%A 本機IP地址
%B 除HTTP頭以外傳送的字節數
%b 以CLF格式顯示的除HTTP頭以外傳送的字節數,也就是當沒有字節傳送時顯示’-'而不是0。
%{Foobar}C 在請求中傳送給服務端的cookieFoobar的內容。
%D 服務器處理本請求所用時間,以微為單位。
%{FOOBAR}e 環境變量FOOBAR的值
%f 文件名
%h 遠端主機
%H 請求使用的協議
%{Foobar}i 發送到服務器的請求頭Foobar:的內容。
%l 遠端登錄名(由identd而來,如果支持的話),除非IdentityCheck設為"On",否則將得到一個"-"。
%m 請求的方法
%{Foobar}n 來自另一個模塊的注解Foobar的內容。
%{Foobar}o 應答頭Foobar:的內容。
%p 服務器服務于該請求的標準端口。
%P 為本請求提供服務的子進程的PID。
%{format}P 服務于該請求的PID或TID(線程ID),format的取值范圍為:pid和tid(2.0.46及以后版本)以及hextid(需要APR1.2.0及以上版本)
%q 查詢字符串(若存在則由一個"?"引導,否則返回空串)
%r 請求的第一行
%s 狀態。對于內部重定向的請求,這個狀態指的是原始請求的狀態,—%>s則指的是最后請求的狀態。
%t 時間,用普通日志時間格式(標準英語格式)
%{format}t 時間,用strftime(3)指定的格式表示的時間。(默認情況下按本地化格式)
%T 處理完請求所花時間,以秒為單位。
%u 遠程用戶名(根據驗證信息而來;如果返回status(%s)為401,可能是假的)
%U 請求的URL路徑,不包含查詢字符串。
%v 對該請求提供服務的標準ServerName。
%V 根據UseCanonicalName指令設定的服務器名稱。
%X 請求完成時的連接狀態:X= 連接在應答完成前中斷。
+= 應答傳送完后繼續保持連接。
-= 應答傳送完后關閉連接。
(在1.3以后的版本中,這個指令是%c,但這樣就和過去的SSL語法:%{var}c沖突了)
%I 接收的字節數,包括請求頭的數據,并且不能為零。要使用這個指令你必須啟用mod_logio模塊。
%O 發送的字節數,包括請求頭的數據,并且不能為零。要使用這個指令你必須啟用mod_logio模塊。
修飾符
可以緊跟在"%"后面加上一個逗號分隔的狀態碼列表來限制記錄的條目。例如,"%400,501{User-agent}i"只記錄狀態碼400和501發生時的User-agent頭內容;不滿足條件時用"-"代替。狀態碼前還可以加上"!"前綴表示否定,"%!200,304,302{Referer}i"記錄所有不同于200,304,302的狀態碼發生時的Referer頭內容。
"<"和">"修飾符可以用來指定對于已被內部重定向的請求是選擇原始的請求還是選擇最終的請求。默認情況下,%s, %U, %T, %D, %r 使用原始請求,而所有其他格式串則選擇最終請求。例如,%>s 可以用于記錄請求的最終狀態,而 %<u 則記錄一個已經被內部重定向到非認證資源的請求的原始認證用戶。
一些說明:出于安全考慮,從2.0.46版本開始,%r, %i, %o 中的特殊字符,除了雙引號(")和反斜線()分別用 " 和 / 進行轉義、空白字符用C風格(n, t 等)進行轉義以外,非打印字符和其它特殊字符使用 xhh 格式進行轉義(hh是該字符的16進制編碼)。在2.0.46以前的版本中,這些內容會被完整的按原樣記錄。這種做法將導致客戶端可以在日志中插入控制字符,所以你在處理這些日志文件的時候要特別小心。
在2.0版本中(不同于1.3),%b 和 %B 格式字符串并不表示發送到客戶端的字節數,而只是簡單的表示HTTP應答字節數(在連接中斷或使用SSL時與前者有所不同)。mod_logio提供的 %O 格式字符串將會記錄發送的實際字節數。
示例
一些常見的格式串:
通用日志格式(CLF)
"%h %l %u %t "%r" %>s %b"
帶虛擬主機的通用日志格式
"%v %h %l %u %t "%r" %>s %b"
NCSA擴展/組合日志格式
"%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i""
Referer日志格式
"%{Referer}i -> %U"
Agent(Browser)日志格式
"%{User-agent}i"
文章開頭提到的LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" common 中間用" "包含的參數都可以在上面找到對應的說明,至于最后的那個common,其實就是這種格式的一種標識符,當你套用這種格式記錄日志的時候,就可以直接使用標識符了,例如:
CustomLog logs/access_log common
就會在logs下面產生一個以common為格式記錄的日志文件access_log
新聞熱點
疑難解答