如何讓 IIS 6 &amp IIS 7 LOG 不緩衝直接寫入到紀錄檔

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
      ------------------------------------------------------------------------------------------
       
  • 設定 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
 

如果覺得這篇文章對你有所幫助,可以透過 Paypal 支持作者唷~