【问题标题】:PHP regex pattern to format Apache logs用于格式化 Apache 日志的 PHP 正则表达式模式
【发布时间】:2012-06-21 08:28:54
【问题描述】:

我有这个正则表达式模式适用于我当前的 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。

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

【问题讨论】:

    标签: php regex apache logging


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨,它成功了!谢谢!我刚刚在它周围添加了“(”和“)”,就像这样 ([\w.]+) 在比赛中被捕获。
    • 哦,当然,我忘了那些:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多