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