[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > Apache > 正文
Apche日志系列(3):定制日志
http://cn.internet.com 仙人掌工作室 編譯 (2001-05-16 20:56:44)
有時候我們需要定制Apache默認日志的格式和內容,比如增加或減少日志所記錄的信息、改變默認日志文件的格式等。本文介紹可以用日志記錄的所有信息,以及如何設置Apache使其記錄這些信息。 

一、定義日志格式(4月3日) 

   很久以前,日志文件只有一種格式,這就是“公共格式”,許多人已經習慣使用這種格式。隨出現了定制日志格式,而且看起來定制日志格式更很受歡迎,即使公共日志格式本身也重新用定制日志格式定義。本文介紹的就是如何隨心所欲地定制日志文件的格式、如何讓日志文件記錄自己想要的信息。 

   定制日志文件的格式涉及到兩個指令,即LogFormat指令和CustomLog指令,默認httpd.conf文件提供了關這兩個指令的幾個示例。 

   LogFormat指令定義格式並為格式指定一個名字,以我們就可以直接引用這個名字。CustomLog指令設置日志文件,並指明日志文件所用的格式(通常通過格式的名字)。 

   LogFormat指令的功能是定義日志格式並為它指定一個名字。例如,在默認的httpd.conf文件中,我們可以找到下面這行代碼: 



   LogFormat "%h %l %u %t \"%r\" %>s %b" common 





   該指令創建了一種名為“common”的日志格式,日志的格式在雙引號包圍的內容中指定。格式字符串中的每一個變量代表著一項特定的信息,這些信息按照格式串規定的次序寫入到日志文件。 

   Apache文檔已經給出了所有可用格式串的變量及其含義,下面是其譯文: 

---------------------------------------------------------------------- 

 %...a:     遠程IP地址 

 %...A:     本地IP地址 

 %...B:     已發送的字節數,不包含HTTP頭 

 %...b:     CLF格式的已發送字節數量,不包含HTTP頭。 

           例如當沒有發送數據時,寫入‘-’而不是0。 

 %...{FOOBAR}e: 環境變量FOOBAR的內容 

 %...f:     文件名字 

 %...h:     遠程主機 

 %...H      請求的協議 

 %...{Foobar}i: Foobar的內容,發送給服務器的請求的標頭行。 

 %...l:     遠程登錄名字(來自identd,如提供的話) 

 %...m      請求的方法 

 %...{Foobar}n: 來自另外一個模塊的注解“Foobar”的內容 

 %...{Foobar}o: Foobar的內容,應答的標頭行 

 %...p:     服務器響應請求時使用的端口 

 %...P:     響應請求的子進程ID。 

 %...q      查詢字符串(如果存在查詢字符串,則包含“?”面的 

           部分;否則,它是一個空字符串。) 

 %...r:     請求的第一行 

 %...s:     狀態。對進行內部重定向的請求,這是指*原來*請求 

           的狀態。如果用%...>s,則是指來的請求。 

 %...t:     以公共日志時間格式表示的時間(或稱為標準英文格式) 

 %...{format}t: 以指定格式format表示的時間 

 %...T:     為響應請求而耗費的時間,以秒計 

 %...u:     遠程用戶(來自auth;如果返回狀態(%s)是401則可能是偽造的) 

 %...U:     用戶所請求的URL路徑 

 %...v:     響應請求的服務器的ServerName 

 %...V:     依照UseCanonicalName設置得到的服務器名字 


------------------------------------------------------------------ 


   在所有上面列出的變量中,“...”表示一個可選的條件。如果沒有指定條件,則變量的值將以“-”取代。分析前面來自默認httpd.conf文件的LogFormat指令示例,可以看出它創建了一種名為“common”的日志格式,其中包括:遠程主機,遠程登錄名字,遠程用戶,請求時間,請求的第一行代碼,請求狀態,以及發送的字節數。 

   有時候我們只想在日志中記錄某些特定的、已定義的信息,這時就要用到“...”。如果在“%”和變量之間放入了一個或者多個HTTP狀態代碼,則只有當請求返回的狀態代碼屬指定的狀態代碼之一時,變量所代表的內容才會被記錄。例如,如果我們想要記錄的是網站的所有無效鏈接,那可以使用: 

---------------------------------------------------- 

   LogFormat %404{Referer}i BrokenLinks 

--------------------------------------------------- 



   反之,如果我們想要記錄那些狀態代碼不等指定值的請求,只需加入一個“!”符號即可: 



   LogFormat %!200U SomethingWrong 




(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
Apche日志系列(5):高級技術 (2001-05-16 20:57:21)
Apche日志系列(4):日志分析 (2001-05-16 20:57:02)
Apche日志系列(3):定制日志 (2001-05-16 20:56:44)
Apche日志系列(2):錯誤日志 (2001-05-16 20:56:18)
Apche日志系列(1):訪問日志 (2001-05-16 20:55:54)
 

★  樊強制作 歡迎分享  ★