在Windows服务器上运行ASP.NET应用程序时,可能会遇到各种错误。幸运的是,Windows和ASP.NET提供了多种日志,用于记录失败的请求。虽然可能熟悉标准的IIS日志,但如果需要更详细的错误消息或在IIS日志文件中找不到任何内容,还可以查看其他地方。
1. 标准IIS日志
标准IIS日志将包含通过IIS站点流动的每一个Web请求。通过IIS管理器,可以验证IIS日志是否已启用以及它们被写入的位置。应该在以W3SVC站点ID编号命名的文件夹中找到日志。
默认情况下,IIS日志中的每个记录请求将包括多个关键字段,包括URL、查询字符串以及通过状态、子状态和Win32状态的错误代码。这些状态代码可以帮助更详细地识别实际错误。
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2016-09-13 21:45:10 ::1 GET /webapp2 - 80 - ::1 Mozilla/5.0 - 500 0 0 5502
2016-09-13 21:45:10 ::1 GET /favicon.ico - 80 - ::1 Mozilla/5.0 http://localhost/webapp2 404 0 2 4
“sc-status”和“sc-substatus”字段是标准的HTTP状态代码,例如200表示OK,404,500表示错误等。“sc-win32-status”可以提供更多细节,除非查找代码,否则不会知道它们。它们是基本的Win32错误代码。
2. 在IIS日志中找不到请求?HTTPERR是IIS错误日志
每一个Web请求都应该显示在IIS日志中。如果没有,可能是请求从未到达IIS,或者IIS没有运行。还要确保IIS日志记录已启用。
传入服务器的请求首先通过HTTP.SYS路由,然后交给IIS。这些类型的错误会记录在HTTPERR中。常见的错误有400 Bad Request、超时、503 Service Unavailable以及类似类型的问题。HTTP.SYS的内置错误消息和错误代码通常非常详细。
HTTPERR错误日志在哪里?
C:\Windows\System32\LogFiles\HTTPERR
3. 在Windows事件查看器中查找ASP.NET异常
默认情况下,ASP.NET会将未处理的500级异常记录到Windows应用程序事件日志中。这是由ASP.NET Health Monitoring功能处理的。可以通过web.config文件中的system.web/healthMonitoring来控制它的设置。
很少有人意识到写入应用程序事件日志的错误数量是受到速率限制的。因此,可能找不到错误!默认情况下,它每分钟只记录一次相同类型的错误的日志。还可以禁用将任何错误写入应用程序事件日志。
仍然找不到异常?
根据使用的是WebForms、MVC、Web API、WCF还是其他框架,可能会遇到ASP.NET由于与健康监控功能不兼容而根本没有将任何错误写入ASP.NET的问题。
4. 启用失败请求跟踪以获得高级IIS错误日志
失败请求跟踪(FRT)可能是IIS中最少使用的功能之一。它提供了强大的IIS日志记录,并作为一个很好的IIS错误日志。FRT在IIS管理器中启用,可以通过规则配置所有请求、慢速请求或仅某些响应状态代码。
FRT的唯一问题是它非常详细。它跟踪IIS管道的每一步和每一个细节。可能需要花费大量时间来解读单个请求。