Apache 日誌文件簡述

apache日誌分析

1. 日誌類型
訪問日誌

格式:119.79.247.29 - - [10/Jan/2015:09:40:12 +0800] "GET /api/service/friends/dynamic HTTP/1.1" 200 4952 "-" "-"

錯誤日誌

格式:[Sun Jan 04 04:09:16 2015] [error] [client 112.124.127.64] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /var/www/html/index.php on line 2
* 日期
* 錯誤級別
* 用戶IP地址
* 錯誤信息

CGI錯誤

格式:和錯誤日誌格式很像,只是它的錯誤信息可能爲多行

2. 定義日誌格式

定製日誌文件的格式涉及到兩個指令,即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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章