我正在查看 3.5 中的一个全新的 asp.net 站点,它绝对没有错误处理或日志记录。记录和处理错误有哪些好的选择?我在 1.1 框架上使用过 Log4Net,但听说 3.5 中可能有更好的选择。
6 回答
一种选择是 ELMAH。我在这里问了一个问题: ASP.NET 错误处理。
从那以后,我实现了它的一个稍微修改过的版本,并且日志和电子邮件非常好,并且很容易通过 web.config 文件集成。
我们使用两个选项进行日志记录:-
用于意外异常处理的ELMAH
NLog用于预期的手动(调试、信息和错误)信息。
ELMAH是一个很棒的开箱即用插件,可以自动捕获异常(从 404(找不到页面)到抛出的 500 异常),并具有内置的 web-ui 来可视化这些错误。因此,这是一种非常快速有效的方法来捕捉发生的意外错误。
现在NLog通过让我们的开发人员在特定位置手动将调试信息插入到代码中来 补充这一点,因此当我们需要从非本地主机系统中获取信息时,这非常容易。例如,我们log.Debug(..)
在大多数方法中乱扔代码以查看局部变量是什么或返回值等。对于更重要的信息,我们然后使用log.Info(..)
.. 但很少使用它。最后,对于我们捕获和处理的严重错误,我们通常在某些范围内使用log.Error(..)
or ..。因此,在我们的测试或实时服务器上,如果我们需要获取大量数据、实时......或者只是一般的重要信息,例如状态和更大,我们会打开所有日志记录状态(例如和更大)。我们总是有log.Warn(..)
try/catch
Debug
Info
Warn, Error and Fatal
状态始终开启。调试状态会生成大量数据,因此我们仅少量使用。
总而言之,我建议您对 WebApp 使用两种方法。Elmah 用于出色的意外错误捕获,NLog 用于预期信息和错误。
最后,NLog 比 Log4Net 更容易使用/工作。它基本上取代了它,IMO。
如果您习惯于 log4net,请坚持您所知道的。它简单、快速且运行良好。我已经在 1.1、2.0 和现在的 3.5 中使用了多年。
ASP.NET 健康监控实际上开箱即用,做得相当不错!
Enterprise Library可能有一个学习曲线,但它是一个很好的项目。
在 Asp.Net 中遵循 david hayden 的文章Enterprise Library 2.0 Logging Application Block
就个人而言,我没有尝试过 log4net,但看到了 winforms 的规范和示例,但我的组织编写了我们自己的日志记录机制,用于报告和记录 global.asax 中捕获的错误,报告我们需要了解的有关堆栈跟踪、会话的所有信息(如果存在)、表单的 NVC、应用程序的版本、使用查询字符串和 HTTP 标头引发错误的 URL。尽管我注意到并非所有错误都记录在那里;例如表单身份验证过期或应用程序池重新启动/关闭或由 IIS 报告的未由应用程序执行引发的任何内容。