IIS日志中记录了每个请求的信息,包括正常的响应请求和有异常的请求。这里所说的【异常】与.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,此时表示,在处理请求过程中发生了未捕获异常,但异常结果成功发送给客户端。