2012-06-19 68 views
1

我已經得到了我目前的Apache日誌格式的工作原理是正則表達式:PHP正則表達式來格式化Apache日誌

preg_match("/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/", $line, $matches); // pattern to format the line 

它的工作原理與此日誌:

127.0.0.1 - - [19/Jun/2012:11:38:37 +0200] "GET /some_page HTTP/1.1" 200 8243 "http://example.com/referrer" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5" 

現在我已經改變了apache日誌格式以包含服務器名稱,因此新日誌將爲:

127.0.0.1 - - [19/Jun/2012:11:38:37 +0200] **servername.com** "GET /some_page HTTP/1.1" 200 8243 "http://example.com/referrer" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5" 

它唯一加入的是servername.com在「GET/url ...」之前。

現在,正則表達式不再工作,我不知道我需要修改什麼才能使它匹配新的日誌格式。

回答

1

這裏是你的正則表達式更新:

preg_match("/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] [\w.]+ \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/", $line, $matches); 

我增加了一個額外[\ w。] +組應匹配您的服務器名稱。

+0

嗨,它的工作!謝謝!我剛剛在它周圍加了「(」和「)」,就像這樣([\ w。] +)在比賽中被捕獲。 –

+0

哦,當然,我忘了那些:) –