Apche日誌系列(3):定製日誌(轉)

post0發表於2007-08-09
Apche日誌系列(3):定製日誌(轉)[@more@]

有時候我們需要定製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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-937344/,如需轉載,請註明出處,否則將追究法律責任。

相關文章