IIS 的 LOG 是由 http.sys 控制,其預設的快取大小為 64KB (也是最大的設定),最小可以設定為 12KB。一般預設是不用變更快取大小,除非是特殊需求,不然改變大小甚至停用反而會對校能造成一定程度的影響。
適用系統:
- Windows Server 2003 Family
- Windows Server 2008 Family
一個炎熱的正午,我正撰寫一份評估報告...正當寫到六神無主已經快被周公招喚下棋時,MSN彼端喘來清脆的 "登登登"。惺忪的睡眼緩緩的睜開,強振作精神定睛一看 -- 是中國風鳳眼美女小小來的訊息,而小小問了一個比較少見的問題:
我設定了一個站台,站台的 LOG 相關設置都是預設的沒有變更,但...當進到站台時LOG並沒有即時的寫入,而是都要等固定的大小之後才會寫入,可是這邊在測試階段需要很即時的紀錄查閱,不知道 IIS 6 可以這樣設定嗎?
恩...一般來說,正式的環境之下並不會有需要 LOG 即時寫入並查閱的情況,但也可能是金融業很要求 Real-time 的呈現吧,基於這個問題的特殊性,好奇之心也油然而生~馬上到 Google 與 MS TechNet 翻一遍。
這裡先說明一個基本概念,IIS 的 LOG 是由 http.sys 控制,其預設的快取大小為 64KB (也是最大的設定),最小可以設定為 12KB。一般預設是不用變更快取大小,除非是特殊需求,不然改變大小甚至停用反而會對校能造成一定程度的影響。經過一番搜尋與實驗,歸納出了以下幾個方法:
- 設定 IIS 的 Global Registry Entries -- 縮小 LOG 的緩衝大小
- 於 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Http\Parameters\ 新增一個名稱為 LogBufferSize 的 DWORD,可設定的 RANGE 為 12K~64K (12288 - 65536)
- 下面是已經我將上述設定之 REG 匯出的文字,可以存程 REG 以備不時之需
------------------------------------------------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters]
"LogBufferSize"=dword:00002fc4
------------------------------------------------------------------------------------------
- 於 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Http\Parameters\ 新增一個名稱為 LogBufferSize 的 DWORD,可設定的 RANGE 為 12K~64K (12288 - 65536)
- 設定 IIS 的 Global Registry Entries -- 停用 IIS LOG 的緩衝 (注意!!請小心使用!!!)
- 以下的設定是在網路上找到的,經過測試的確是有用的,但在 MS TechNet 上是找不到該設定,也就是說...這個屬性是不被微軟官方所支援的,使用時請務必小心!!並且不要在正式機上開啟此設定!!
- 於 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Http\Parameters\ 新增一個名稱為 DisableLogBuffering 的 DWORD,可設定的 RANGE 為 0 or 1 ( 1 為啟用 )
- 登錄檔快速設定
------------------------------------------------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters]
"DisableLogBuffering"=dword:00000001
------------------------------------------------------------------------------------------
- [IIS 7 適用]將 IIS Log Buffer 倒出並寫入到紀錄檔
- 在命令提示自元下輸入:
Netsh http flush logbuffer
完成後會出現 "確定",這是最簡單的方法,Windows 2008 果然是好物~
- 在命令提示自元下輸入:
參考:
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/60a90c91-a8d0-43b6-89db-a431d0ea0cb4.mspx?mfr=true
http://www.gafvert.info/notes/FlushLog.htm
http://forums.iis.net/p/1070268/1561510.aspx
http://forums.iis.net/p/993348/1294650.aspx