首页 / 知识

您如何在ASP.NET应用程序中记录错误(异常)?

2023-04-12 06:20:00

您如何在ASP.NET应用程序中记录错误(异常)?

How do you log errors (Exceptions) in your ASP.NET apps?

我正在寻找在ASP.NET应用程序中记录错误的最佳方法。
我希望当我的应用程序发生错误时能够接收电子邮件,其中包含有关Exception和当前Request的详细信息。

在我的公司中,我们曾经拥有自己的ErrorMailer,可以捕获Global.asax Application_Error中的所有内容。 可以,但是不是很灵活,也不是可配置的。

我们最近切换到了NLog。 它更具可配置性,我们可以为错误定义不同的目标,过滤它们,缓冲它们(尚未尝试)。 这是一个非常好的改进。

但是我最近发现,.Net框架中有一个用于此目的的完整命名空间:System.Web.Management,可以在web.config的healthMonitoring部分中对其进行配置。

您是否曾经使用过.Net健康监控? 错误记录的解决方案是什么?


我用elmah。它具有一些非常好的功能,这是有关CodeProject的文章。我认为StackOverflow团队也使用elmah!


我一直在使用Log4net,配置为通过电子邮件发送致命错误的详细信息。它还设置为将所有内容记录到日志文件,这在尝试调试问题时非常宝贵。另一个好处是,如果该标准功能无法实现您想要的功能,那么编写自定义的附加程序就很容易,该附加程序可以根据需要处理日志信息。

话虽如此,我将它与自定义错误处理程序配合使用,该错误处理程序发送的html电子邮件比标准log4net电子邮件中包含的信息多一些-页面,会话变量,cookie,http服务器变量等。

这些都在Application_OnError事件中进行了连接,在该事件中,该异常作为致命异常记录在log4net中(然后将其通过电子邮件发送到指定的电子邮件地址),并使用自定义错误处理程序进行处理。

首先从Coding Horror博客条目"负责任崩溃"中了解到Elmah,尽管看上去很有希望,但我尚未在任何项目中实施它。


我使用log4net,在任何我希望发生异常的地方,都将其记录到适当的级别。 我倾向于不抛出异常,因为它实际上并不能提供很好的用户体验,在当前状态下您可以提供的信息较少。

我还将Application_Error也配置为捕获所有未预期到的异常,并且该错误通过log4net作为致命优先级记录下来(好吧,因为它们的严重性不是很高,所以检测到404并将其记录为Info)。


我一直在使用企业库的Logging对象。它允许您进行不同类型的日志记录(平面文件,电子邮件和/或数据库)。它是非常可定制的,并且具有用于更新日志配置的web.config的良好界面。通常,我从Global.asax中的On Error调用日志记录。

这是MSDN的链接


我们使用EnterpriseLibrary.ExceptionHandling.Logging。 我喜欢它比log4net好一点,因为我们不仅可以完全控制日志记录,而且可以在config中控制Throw / NoThrow决策。


我最近用NLog构建了一个asp.net Web服务,我将其用于所有桌面应用程序。在Visual Studio中进行调试时,日志记录工作正常,但是,一旦切换到IIS,就不会创建日志文件。我尚未确定原因,但事实上,我需要寻找解决方案,这使我想尝试一些其他满足asp.net需求的东西!


我的团队使用来自Apache的log4net。它非常轻巧,易于设置。最棒的是,它完全可以从web.config文件中进行配置,因此,一旦在代码设置中有了钩子,就可以通过更改web.config文件来完全更改日志记录的方式。

log4net支持记录到各种各样的位置-数据库,电子邮件,文本文件,Windows事件日志等。我的团队对其进行了配置,可以将详细的错误信息发送到数据库,还可以将包含足够信息的电子邮件发送给整个团队我们确定错误源自代码的哪一部分。然后,我们知道由谁负责这段代码,他们可以进入数据库以获取更多详细信息。


我们使用编写的自定义本地记录实用程序。它要求您在需要的任何地方自行实现日志记录。但是,它还使您不仅可以捕获异常,还可以捕获更多信息。

例如,我们的代码如下所示:

1
2
3
4
5
6
7
8
Try
  Dim p as New Person()
  p.Name ="Joe"
  p.Age = 30
Catch ex as Exception
  Log.LogException(ex,"Err creating person and assigning name/age")
  Throw ex
End Try

这样,我们的记录器会将我们需要的所有信息写入SQL数据库。我们在数据库级别设置了电子邮件警报,以查找某些错误或频繁发生的错误。它可以帮助我们准确地确定错误的来源。

这可能与您要找的不完全一样。类似于使用Global.asax的另一种方法是给我们一种代码注入技术,例如带有PostSharp的AOP。这使您可以在每个方法的开头和结尾或每个异常上注入自定义代码。这是一种有趣的方法,但我认为它可能会带来沉重的性能开销。


应用程序错误方法电子邮件

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢