﻿# 如何讓 IIS7 的存取記錄(Logs)從緩衝區強制寫入到磁碟

前幾天我們公司的一個網站專案上線，由於是第一天上線且經常使用的網站使用者又多達數萬人，也因此第一天上線時狀況頗多，所以需要收集各式紀錄，包括 EventLog, IIS Logs, URLScan Logs, … 等，但唯讀 IIS7 的 Logs 常常抓不到最新的資料，那是因為 IIS 的 Logs 預設都有緩衝(Buffer)機制，因此 IIS 的存取紀錄都會延遲寫入磁碟，所以若直接複製 Logs 檔案將不會是最新資料，大部分人都會利用 IISRESET 重新啟動 IIS 來取得最新的 Logs，但這並非正規的作法，今天我分享另一個技巧。

IIS7 在 [Network Shell (Netsh)](http://technet.microsoft.com/en-us/library/cc754753\(WS.10\).aspx) 指令列工具新增了對 HTTP service 的支援，現有支援的指令可以到 [Netsh Commands for Hypertext Transfer Protocol (HTTP)](http://technet.microsoft.com/en-us/library/cc725882%28WS.10%29.aspx) 查詢到。

這其中就有一個 [flush logbuffer](http://technet.microsoft.com/#BKMK_flushlogbuffer) 指令可以刷新(Flush)在緩衝區(Buffer)尚未寫入磁碟的 Logs 資料：

```
netsh http flush logbuffer
```

![netsh http flush logbuffer](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/58af3516733ce37fb5b6-image.png "netsh http flush logbuffer")

所以當你在要取得目前最新的 IIS Logs 之前只要執行這行指令就可以拿到到目前為止最新的 Logs 紀錄。

**相關連結**

-   [Netsh Commands for Hypertext Transfer Protocol (HTTP)](http://technet.microsoft.com/en-us/library/cc725882%28WS.10%29.aspx)
-   [Network Shell (Netsh)](http://technet.microsoft.com/en-us/library/cc754753\(WS.10\).aspx)
