我需要将统计数据写入实时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文件吗?
答案 0 :(得分:8)
您可以使用apache_note
(http://php.net/apache_note)将您的值写入备注,然后将CustomLog
与LogFormat
(%{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记录访问期限。
我在一个应用程序中使用了大约十二个自定义日志文件,用于所有不同的监控,性能分析和取证目的。每个目的一个日志文件使日志分析更容易。