ASP.NET中应如何记录异常?

9

我应该如何记录异常?我以前从未尝试过在 .NET 中进行日志记录。也没有尝试将异常转储到文本(或二进制)文件中。我不需要文本文件,只想通过文件和行号查看日志的方式。

-编辑- 使用asp.net


1
你能提供更多关于应用程序类型的信息吗?它是客户端应用程序(WinForms、WPF)、Web(ASP.NET Web Forms或MVC)还是Silverlight? - Eilon
1
在我看来,这个问题不是一个确切的重复,阿拉斯泰尔。他特别提到了“例外”。就我个人而言,我记录的不仅仅是异常,但我不会开始做出假设。 "保持目标"。 - Pure.Krome
1
快速使用Google搜索可以获得很多有用的信息。请点击此链接http://tinyurl.com/y9dj974获取详细内容。 - Rachel
3
@acidzombie24:但是你的问题在搜索结果中排名第三... - NotMe
2
@Esteban:这几乎就像一个递归问题,最终可能会导致一个...你知道的。 ;) - NotMe
显示剩余3条评论
13个回答

16

ELMAH 特别适用于使用 ASP.NET 的情况。我最喜欢 ELMAH 的一个功能是无需构建 UI 就可以查看已记录的异常;ELMAH 提供了一个处理程序来报告异常。然而,除了记录异常之外,我从未将其用于记录其他内容。

log4net 和 Microsoft's EntLib 是一些其他想法。如果你真正需要的只是 异常日志记录,那么它们提供了比你所需更多的功能。

此外,如果你真正想要的是测量应用程序性能,你可以考虑使用性能计数器。再次强调使用性能计数器的好处是,在发布数据后,你无需担心构建用于查看/查询数据的 UI。


非常好的回答。我已经下载、使用并将 elmah 实现到我的应用程序中了。谢谢 :) - user34537
@acidzombie:我很高兴ELMAH对你有用。它真的很棒。 :) - Esteban Araya
1
+1 for ELMAH. 一种很棒的解决方案。如果你发现自己在使用ELMAH超过1个应用程序,请查看CodePlex上的ASP.Net异常报告器http://aspexceptionreporter.codeplex.com/。它是一个集中的ELMAH聚合应用程序。 - JamesEggers
ELMAH很棒。喜欢它。在各个地方都用它。 - NotMe
@JamesEggers:太好了!我很高兴你提到了它。我们正准备为我们所有的Web应用程序构建类似的东西。 - Esteban Araya

7

log4net 是一个非常漂亮和标准的系统。学习它是非常值得的,你可以记录到各种格式(或自定义)。 (编辑:然而据我所知,它目前还不支持Silverlight,如果你感兴趣的话,可能需要在那里实现自己的系统)。


3

想要记录异常,请查看项目:ELMAH

对于其他类型的日志记录,可以考虑使用Log4Net


实际上,您可以创建自己的异常类,记录它,并让 ELMAH 在发送真正的问题时忽略它...所以,我也会选择这个方法。 - NotMe

3

NLog非常不错。它比log4net更容易配置...


我赞同!它的表现非常出色 :) - Stormenet
只需几分钟即可配置...而渲染器使其更加出色:https://github.com/nlog/nlog/wiki/Layout-Renderers - JoshYates1980

3

实际上,自从ASP.NET 2.0以来,您不需要记录任何异常。 ASP.NET健康监测会为您记录。默认情况下,它将将异常记录为警告,并记录到应用程序事件日志中。

可以通过配置来自定义此过程。

请参阅ASP.NET健康监测概述


2

企业库日志应用程序块是其中一种选择。它可能比您需要的更多(或更少),但对我来说效果很好。


1

虽然我们在这里推荐各种日志框架,但是让我来推荐CuttingEdge.Logging。它很容易设置,并且与ASP.NET集成良好,但缺少像ELMAH那样的查看器。


1

Log4Net非常好用且易于学习。如果需要更多的功能和可视化效果,可以使用Exceptioneer


1

虽然不是直接回答,但我们发现一个有用的方法来记录我们自己代码中的问题是创建一个基本异常类(从Exception继承),并在所有派生异常中自动记录异常详细信息,使用Log4Net(或其他工具)。

显然,这不会记录其他类型的异常(BCL、第三方),但它确实很有用。

关于记录异常的另一件事,如果您想要完整的堆栈跟踪,请使用Exception.ToString()而不是仅使用Exception.Message。


0

我同意那些提到ELMAH的人。

ELMAH唯一的缺点是它无法记录在实际用户发起请求之外发生的异常。因此,如果您使用计时器或有大量代码在应用程序启动类型事件之外运行,则必须手动记录这些异常。 ELMAH最好的部分是非常容易设置,并带有UI,因此您可以实际查看日志(为什么其他记录器似乎没有UI超出了我的理解)。

Log4Net是一个更完整的日志记录解决方案,特别适用于诊断日志记录,信息日志记录或者想要记录“不是错误”的内容。比企业库更容易配置和使用。

企业库的日志记录组件也很受欢迎,但如果您不使用EntLib提供的其他功能,则EntLib也像货车一样轻巧而微妙。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接