用php写入Apache access_log文件

时间:2010-12-17 13:08:57

标签: php apache error-log

我需要将统计数据写入实时Apache access_log文件(我有另一个进程计算access_log文件中的特定行,它定期报告回另一个进程)。

目前我只是通过在php中执行以下操作来强制进入access_log文件:

file("http://127.0.0.1/logme.php?stuff_that_I_can_watch_here");

logme.php什么都不做,并且成功返回空白。

上述技术的问题在于,对于Apache服务器的每个请求,都会生成另一个写入日志的请求 - 因此需要将所需的apache服务器加倍。

当服务器堆积时,对Apache服务器的简单且通常快速的本地调用将花费5秒钟。

我可以直接写入access_log文件而不会引起问题,或者甚至可以使用类似于syslog()或error_log()的php写入apache_log文件吗?

3 个答案:

答案 0 :(得分:8)

您可以使用apache_notehttp://php.net/apache_note)将您的值写入备注,然后将CustomLogLogFormat%{NOTE_NAME}n)一起使用({{3 }})记录新密钥。解析访问日志的程序也可以读取新的日志记录参数。

答案 1 :(得分:1)

  

可以直接写入access_log

您可以直接写入access_log,但不能这样做。
正在运行的apache可以产生多个进程,
使用像PHP这样较慢的进程锁定文件以进行写入只会进一步延迟记录速度。

  

还是有一种简单的方法可以使用php实现相同的效果

如果请求完全满足您的要求,请不要使用PHP,添加additional custom log 这是更正确的方式,此自定义日志应包含较小的行,如不记录静态文件访问。这会直接改进日志的解析。

答案 2 :(得分:0)

<?php
  $h = fopen('/path/to/access_log', 'a');
  fwrite($h, 'Message');
  fclose($h);
?>

其他人已经就设计发表过评论。 Apache access_log用于Apache记录访问期限。

我在一个应用程序中使用了大约十二个自定义日志文件,用于所有不同的监控,性能分析和取证目的。每个目的一个日志文件使日志分析更容易。