解析PHP错误日志问题 - 错误消息中的换行符(\ n)

时间:2012-01-06 13:47:13

标签: php regex

我正在尝试解析PHP错误日志。问题是按\n分隔文件不起作用。

explode(PHP_EOL, $log)

这不起作用,因为有一些错误消息本身包含\n

如何按行破解此类文件?

有问题的日志摘录:

[04-Jan-2012 21:28:48] PHP Notice:  Use of undefined constant AY_FACEBOOK_TAB_URL - assumed 'AY_FACEBOOK_TAB_URL' in /var/www/[hidden]/default.layout.tpl.php on line 36
[04-Jan-2012 22:38:02] PHP Notice:  Use of undefined constant AY_FACEBOOK_TAB_URL - assumed 'AY_FACEBOOK_TAB_URL' in /var/www/[hidden]/default.layout.tpl.php on line 36
[04-Jan-2012 23:43:33] PHP Warning:  file_get_contents(https://graph.facebook.com/4294967295/picture?type=large): failed to open stream: HTTP request failed! HTTP/1.0 500 Internal Server Error
 in /var/www/[hidden]/result.tpl.php on line 11
[04-Jan-2012 23:43:33] PHP Notice:  Undefined variable: image in /var/www/[hidden]/result.tpl.php on line 20

注意HTTP/1.0 500 Internal Server Error之后的换行符。

2 个答案:

答案 0 :(得分:2)

使用正则表达式匹配行的开头。它通常是日期/时间(时间戳)。

此代码适用于我:

<?php
    $content = file_get_contents('/var/log/php-log.log');

    var_dump(preg_split('/\[\d\d-\w{3}-\d{4}\s+\d\d:\d\d:\d\d\]/', $content));

但是,虽然我正在使用行开始模式进行拆分,但第一个结果项将为空。

答案 1 :(得分:0)

尝试使用"\r\n"并确保它们位于双引号之间。