虽然我可以获得处理请求所花费的时间(%D)的微秒分辨率,以帮助重建请求序列,我想看一下与特定页面生成的多个请求的时间相关的请求。但据我所知,%t说明符仅提供精确到最接近的秒。这使得无法重建原始事件序列。
是否有其他方法可以在我的access_log文件中获取此信息?
TIA
答案 0 :(得分:7)
Apache 2.4现在可以实现。例如,使用以下日志格式而不是%t:
[%{%d/%b/%Y:%H:%M:%S}t.%{msec_frac}t %{%z}t]
这会给出[10/Apr/2012:10:47:22.027 +0000]
答案 1 :(得分:1)
不幸的是,没有。一段时间(How to timestamp request logs with millisecond accuracy in Apache 2.0)已经覆盖了这一点,对于最新的稳定(2.2.x)Apache分支来说仍然如此。
我知道至少有一种解决方法,但是,如果您感兴趣:您可以将Apache的日志传递给外部进程(请参阅http://httpd.apache.org/docs/current/mod/mod_log_config.html下的“CustomLog”指令下的文档页面)时间戳并实际写入日志文件。
请注意,此方法不捕获真实的请求RX时间。 Apache在完成发送响应之后才会输出访问日志条目。另外,当Apache写入管道时,还有一个额外的可变延迟,你的时间戳从中读取(可能包括一些缓冲,那里)。如果你打开了Apache的“BufferLogs”指令,那么缓冲延迟就会变得更多。当系统处于负载状态时,或许在其他边缘情况下,平均延迟可能很容易增长到一秒或更多。
如果延迟不是太差(即“BufferedLogs off”,系统负载较低),您可以通过从外部时间戳中减去“%D”值来获得非常严格的估计值。
有些人(包括我)将Apache的访问日志传递给本地Syslog守护程序(通过'logger'命令或其他)。 syslog守护程序负责处理时间戳等。