查看單個文章
舊 2004-09-18, 03:01 AM   #11 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

Apache日誌:設定日誌  
  有時候我們需要設定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: 狀態。對於進行內部重轉發IP的請求,這是指*原來*請求 的狀態。如果用%...>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
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次