如何在PHP中解析Apache的错误日志?
我想创建一个脚本来解析或理解apache的错误日志,以查看最近的错误是什么。我想知道是否有人有办法这样做,或者有任何想法从哪里开始?
我想创建一个脚本来解析或理解apache的错误日志,以查看最近的错误是什么。我想知道是否有人有办法这样做,或者有任何想法从哪里开始?
首先需要考虑以下几点:
但是,如果这些都不适用,则可以使用正常的文件读取命令来执行此操作。获取最后一个错误的最简单方法是
$contents = @file('/path/to/error.log', FILE_SKIP_EMPTY_LINES);
if (is_array($contents)) {
echo end($contents);
}
unset($contents);
可能有一种更好的方法来做到这一点,不会增加记忆力,但我会把它留给读者作为练习。
最后一点意见:PHP还有一个ini设置,可以将PHP错误重定向到日志文件:error_log = /path/to/error.log
您可以使用php_flag表示法在 httpd.conf 或 .htaccess 文件(如果您有权访问一个)中设置此项:
php_flag error_log /web/mysite/logs/error.log
对于其他任何寻找示例脚本的人来说,我把一些东西放在一起,它有基础知识:
<?php
exec('tail /usr/local/apache/logs/error_log', $output);
?>
<Table border="1">
<tr>
<th>Date</th>
<th>Type</th>
<th>Client</th>
<th>Message</th>
</tr>
<?
foreach($output as $line) {
// sample line: [Wed Oct 01 15:07:23 2008] [error] [client 76.246.51.127] PHP 99. Debugger->handleError() /home/gsmcms/public_html/central/cake/libs/debugger.php:0
preg_match('~^\[(.*?)\]~', $line, $date);
if(empty($date[1])) {
continue;
}
preg_match('~\] \[([a-z]*?)\] \[~', $line, $type);
preg_match('~\] \[client ([0-9\.]*)\]~', $line, $client);
preg_match('~\] (.*)$~', $line, $message);
?>
<tr>
<td><?=$date[1]?></td>
<td><?=$type[1]?></td>
<td><?=$client[1]?></td>
<td><?=$message[1]?></td>
</tr>
<?
}
?>
</table>