可以把日誌按小時滾動,採用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 = '/^(?P[0-9.]+) - - \[(?P[^\]]+)\]+ "GET (?P[^ ]+) HTTP\/1.[1|0|2]" (?P[0-9.]+) (?P[0-9.]+)/i';preg_match($pattern, $log, $match);//var_dump($match);$ip = $match['ip'];$time = strtotime($match['time']);$url = $match['url'];$status = $match['status'];$size = $match['size'];printf("IP:%s 訪問時間:%s URL:%s 狀態:%s 檔案尺寸:%s",$ip,$time,$url,$status,$size);
也可是這樣
運用Regex分隔Apache記錄檔
www.MyException.Cn 網友分享於:2015-08-26 瀏覽:17次
使用Regex分隔Apache記錄檔
通用日誌格式的Apache記錄檔樣本:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
組合日誌格式的Apache記錄檔樣本:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/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"要求標頭。
用來提取資訊的Regex組成:
^ :匹配每一行的開頭。
([0-9.]+)\s :匹配IP地址。
([\w.-]+)\s :匹配identity,由數字字母底線或點分隔字元組成。
([\w.-]+)\s :匹配userid,由數字字母底線或點分隔字元組成。
(\[[^\[\]]+\])\s :匹配時間。
"((?:[^"]|\")+)"\s :匹配請求資訊,雙引號中可能出現轉義的雙引號\"。
(\d{3})\s :匹配狀態代碼。
(\d+|-)\s :匹配響應位元組數或-。
"((?:[^"]|\")+)"\s :匹配"Referer"要求標頭,雙引號中可能出現轉義的雙引號\"。
"((?:[^"]|\")+)" :匹配"User-Agent"要求標頭,雙引號中可能出現轉義的雙引號\"。
$ :匹配行尾。
最終的運算式如下:
^([0-9.]+)\s([\w.-]+)\s([\w.-]+)\s(\[[^\[\]]+\])\s"((?:[^"]|\")+)"\s(\d{3})\s(\d+|-)\s"((?:[^"]|\")+)"\s"((?:[^"]|\")+)"$
以上就介紹了php正則解析apache記錄檔檔案,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。