2010-03-16 76 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]