首頁  >  文章  >  後端開發  >  php正規解析apache日誌檔文件

php正規解析apache日誌檔文件

巴扎黑
巴扎黑原創
2016-11-09 13:28:511836瀏覽

可以把日誌按小時滾動,採用php正規分析日誌的方式進行解決

$logLine ='127.0.0.1 - - [22/May/2015:17:09:13 +0800] "GET /sale/images/y-select.png HTTP/1.1" 200 1095';
$pattern = &#39;/^(?P<ip>[0-9.]+) - - \[(?P<time>[^\]]+)\]+ "GET (?P<url>[^ ]+) HTTP\/1.[1|0|2]" (?P<status>[0-9.]+) (?P<size>[0-9.]+)/i&#39;;
preg_match($pattern, $log, $match);
//var_dump($match);
$ip     = $match[&#39;ip&#39;];
$time   = strtotime($match[&#39;time&#39;]);
$url    = $match[&#39;url&#39;];
$status = $match[&#39;status&#39;];
$size   = $match[&#39;size&#39;];
printf("IP:%s 访问时间:%s URL:%s 状态:%s 文件尺寸:%s",$ip,$time,$url,$status,$size);

 也可是這樣

運用正規表示式分隔Apache日誌檔

www.MyException.Cn  網友分享於:2015-www.MyException.Cn  網友分享於:2015-08 :17次

 

使用正規表示式分隔Apache日誌檔案
通用日誌格式的Apache日誌檔案範例:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -07000 apache_pb.gif HTTP/1.0" 200 2326

組合日誌格式的Apache日誌檔範例:

127.0.0.1 - frank [10/ap/2000:13:55:36 -0700] "GET/gif/p. 1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"



客戶端的IP位址。 
由客戶端identd程序判斷的RFC1413身份(identity),輸出中的符號"-"表示此處的資訊無效。 
HTTP認證系統所得到的存取該網頁的客戶識別(userid),如果網頁沒有設定密碼保護,則此項目將是"-"。 
伺服器完成請求處理時的時間。 
客戶的動作請求的資源使用的協定。 
伺服器傳回給客戶端的狀態碼。 
傳回給客戶端的不包括回應頭的位元組數.如果沒有訊息返回,則此項目應該是"-"。 
"Referer"請求頭。 
"User-Agent"請求頭。 
用來擷取資訊的正規表示式組成: 

^ :符合每一行的開頭。 
([0-9.]+)s :符合IP位址。 
([w.-]+)s :符合identity,由數字字母底線或點分隔符號組成。 
([w.-]+)s :符合userid,由數字字母底線或點分隔符號組成。 
([[^[]]+])s :匹配時間。
"((?:[^"]|")+)"s :匹配請求訊息,雙引號中可能出現轉義的雙引號"。 
(d{3})s :符合狀態碼。 
(d+ |-)s :符合回應位元組數或-。
"((?:[^"]|")+)" :匹配"User-Agent"請求頭,雙引號中可能出現轉義的雙引號"。 
$ :匹配行尾。 式
最終的表達式
最終的表達式如下: 

^([0-9.]+)s([w.-]+)s([w.-]+)s([[^[]]+])s"((?:[ ^"]|")+)"s(d{3})s(d+|-)s"((?:[^"]|")+)"s"((?:[^"]|" )+)"$


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn