IIS日志中記錄了每個請求的信息,包括正常的響應請求和有異常的請求。這里所說的【異?!颗c.netframework中的異常沒有關系。對于一個ASP.NET程序來說,如果拋出一個未捕獲異常,會記錄到IIS日志中(500),但我所說的異常不僅限于此。
一、本文所說的異??煞譃樗膫€部分:
1.(ASP.NET)程序拋出的未捕獲異常,導致服務器產生500的響應輸出。
2.404之類的請求資源不存在錯誤。
3.大于500的服務器錯誤,例如:502,503
4.系統錯誤或網絡傳輸錯誤。
前三類異常可以用下面的查詢獲得:
selectscStatus,count(*)AScount,sum(timetaken*1.0)/1000.0ASsum_timetaken_second
fromMyMVC_WebLogwith(nolock)
groupbyscStatus
orderby3desc

二、IIS日志中有一列:sc-win32-status,它記錄了在處理請求過程中,發生的系統級別錯誤,例如網絡傳輸錯誤。
正常情況下,0表示正常,出現非零值意味著出現了錯誤。我們可以這樣統計這類錯誤:
declare@recCountbigint;
select@recCount=count(*)fromMyMVC_WebLogwith(nolock)
selectscWin32Status,count(*)AScount,(count(*)*100.0/@recCount)AS[percent]
fromMyMVC_WebLogwith(nolock)
wherescWin32Status>0
groupbyscWin32Status
orderby2desc

1、下表列出了比較常見的與網絡相關的錯誤及解釋:
2、所有狀態碼都可以通過下面的命令來獲取對應的解釋:
D:/Temp>nethelpmsg64
指定的網絡名不再可用。
3、關于scwin32status與scStatus,我還想補充說明一下:它們沒有關聯。
比如請求這個地址:http://www.abc.com/test.aspx,有可能scStatus=200,但scwin32status=64,此時表示ASP.NET已成功處理請求,但是IIS在發送響應結果時,客戶端的連接斷開了。另一種情況是:scStatus=500,但scwin32status=0,此時表示,在處理請求過程中發生了未捕獲異常,但異常結果成功發送給客戶端。