2010-03-16 43 views
2

虽然我可以获得处理请求(%D)以帮助重建请求序列所需的时间的微秒分辨率,但我想看看这与多个请求的时间有关由特定页面生成。但是据我所知,%t说明符只能提供精确到最近的秒。这使得重建事件的原始顺序变得不可能。亚秒的请求时间记录在Apache

是否有另一种方法可以在我的access_log文件中获取此信息?

TIA

回答

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”指令,将会有更多的变量缓冲延迟。当系统处于负载状态时,或者在其他边缘情况下,平均延迟可能会轻松增长到一秒或更长时间。

如果延迟不是太差(即“缓冲日志关闭”,系统负载较低),则可以通过从外部时间戳中减去“%D”值得到一个非常紧密的估计值。

有些人(包括我)将Apache的访问日志传递给本地Syslog守护进程(通过'logger'命令或其他)。 syslog守护进程负责时间戳等等。

6

现在可以使用Apache 2.4。例如,而不是使用%T以下日志格式:

[%{%d/%b/%Y:%H:%M:%S}t.%{msec_frac}t %{%z}t] 

这会给几次都是[10/Apr/2012:10:47:22.027 +0000]