繁体   English   中英

PHP regex模式可格式化Apache日志

[英]PHP regex pattern to format Apache logs

我有这种正则表达式模式可以与我当前的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"

唯一要做的就是在“ GET / url ...”之前添加servername.com。

现在正则表达式不再起作用了,我不知道我必须修改什么使其与新的日志格式匹配。

这是您更新的正则表达式:

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

我添加了一个额外的[\\ w。] +组,该组应与您的服务器名称匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM