我应该如何记录异常?我以前从未尝试过在 .NET 中进行日志记录。也没有尝试将异常转储到文本(或二进制)文件中。我不需要文本文件,只想通过文件和行号查看日志的方式。
-编辑- 使用asp.net
我应该如何记录异常?我以前从未尝试过在 .NET 中进行日志记录。也没有尝试将异常转储到文本(或二进制)文件中。我不需要文本文件,只想通过文件和行号查看日志的方式。
-编辑- 使用asp.net
ELMAH 特别适用于使用 ASP.NET 的情况。我最喜欢 ELMAH 的一个功能是无需构建 UI 就可以查看已记录的异常;ELMAH 提供了一个处理程序来报告异常。然而,除了记录异常之外,我从未将其用于记录其他内容。
log4net 和 Microsoft's EntLib 是一些其他想法。如果你真正需要的只是 异常日志记录,那么它们提供了比你所需更多的功能。
此外,如果你真正想要的是测量应用程序性能,你可以考虑使用性能计数器。再次强调使用性能计数器的好处是,在发布数据后,你无需担心构建用于查看/查询数据的 UI。
log4net 是一个非常漂亮和标准的系统。学习它是非常值得的,你可以记录到各种格式(或自定义)。 (编辑:然而据我所知,它目前还不支持Silverlight,如果你感兴趣的话,可能需要在那里实现自己的系统)。
NLog非常不错。它比log4net更容易配置...
实际上,自从ASP.NET 2.0以来,您不需要记录任何异常。 ASP.NET健康监测会为您记录。默认情况下,它将将异常记录为警告,并记录到应用程序事件日志中。
可以通过配置来自定义此过程。
请参阅ASP.NET健康监测概述。
企业库日志应用程序块是其中一种选择。它可能比您需要的更多(或更少),但对我来说效果很好。
虽然不是直接回答,但我们发现一个有用的方法来记录我们自己代码中的问题是创建一个基本异常类(从Exception继承),并在所有派生异常中自动记录异常详细信息,使用Log4Net(或其他工具)。
显然,这不会记录其他类型的异常(BCL、第三方),但它确实很有用。
关于记录异常的另一件事,如果您想要完整的堆栈跟踪,请使用Exception.ToString()而不是仅使用Exception.Message。
我同意那些提到ELMAH的人。
ELMAH唯一的缺点是它无法记录在实际用户发起请求之外发生的异常。因此,如果您使用计时器或有大量代码在应用程序启动类型事件之外运行,则必须手动记录这些异常。 ELMAH最好的部分是非常容易设置,并带有UI,因此您可以实际查看日志(为什么其他记录器似乎没有UI超出了我的理解)。
Log4Net是一个更完整的日志记录解决方案,特别适用于诊断日志记录,信息日志记录或者想要记录“不是错误”的内容。比企业库更容易配置和使用。
企业库的日志记录组件也很受欢迎,但如果您不使用EntLib提供的其他功能,则EntLib也像货车一样轻巧而微妙。