我正在寻找在ASP.NET应用程序中记录错误的最好方式。 我希望能够接收电子邮件时,在我的应用程序中发生的错误,以及有关异常和当前请求的详细信息。
在我的公司,我们曾经有过自己的ErrorMailer,捕捉在Global.asax的Application_Error一切。 这是“确定”,但不是很灵活,也可配置。
最近,我们切换到NLOG。 它更可配置,我们可以为错误定义不同的目标,进行筛选,缓冲它们(还没有尝试过)。 这是一个很好的改善。
但是我发现最近有在此目的.net框架整体命名空间: System.Web.Management ,它可以在配置healthMonitoring web.config中的部分。
你有没有与.net健康监测工作? 什么是您的错误记录解决方案?
我使用ELMAH 。 它有一些非常好的功能,这里是一个CodeProject上就可以了文章。 我认为StackOverflow的团队使用ELMAH也!
我一直在使用log4net的 ,配置以电子邮件的致命错误的详细信息。 它也设置为登录一切到一个日志文件,尝试调试问题时,这是非常宝贵的。 另一个好处是,如果你希望它是什么标准功能不去做,这也很容易编写,因为需要可以处理日志信息的自定义添加器。
说了这么多,我使用这个亦随其散发出的HTML电子邮件提供更多的信息比包含在标准log4net的电子邮件自定义错误处理程序 - 网页,会话变量,饼干,http服务器变量,等等。
在Application_OnError活动期间,凡异常被记录为log4net的致命异常(然后使它通过电子邮件发送给指定的电子邮件地址),并且还使用自定义错误处理程序处理,这些都连接好。
第一次听到ELMAH从编码恐怖博客条目, 撞车负责地 ,虽然它看起来很有希望我还没有实现它的任何项目。
我一直在使用企业库的记录对象。 它可以让你有不同类型的日志记录(平面文件,电子邮件,和/或数据库)。 这是非常可定制的,具有更新你的web.config的日志记录的配置相当不错的界面。 通常我叫我的日志从Global.asax中上的错误。
下面是MSDN的链接
我使用log4net的何地我期待一个例外,我可以记录在适当的水平。 我倾向于不重新抛出异常,因为它并没有真正允许作为,良好的用户体验,也可以在当前状态下提供较少的信息。
我要的Application_Error还配置搭上这是没有预料到任何异常和错误是通过log4net的记录为致命的优先级(良好,检测并记录为信息,因为他们没有那么高的严重性404的)。
我的团队使用log4net的 Apache的。 这是很轻便,易于安装。 最重要的是,它是从web.config文件完全可配置的,所以一旦你已经在你的代码设置了钩子,你可以彻底改变仅通过改变web.config文件中记录的方式完成。
log4net的支持记录到各种各样的地点 - 数据库,电子邮件,文本文件,Windows事件日志等我的团队有它配置为详细的错误信息发送到数据库,并同时发送电子邮件给整个团队有足够的信息我们确定产生错误的代码的哪个部分。 然后,我们知道谁是负责那一块的代码,他们可以到数据库以获取更详细的信息。
我最近建有NLOG一个asp.net web服务,我用我所有的桌面应用程序。 当我调试在Visual Studio中,但只要我转了IIS的日志文件不创建日志记录工作正常; 我还没有确定原因,但事实上,我需要寻找一个解决方案使得我想尝试别的东西我的asp.net的需求!
我们使用EnterpriseLibrary.ExceptionHandling.Logging。 我喜欢有点比log4net的更好,因为我们不仅完全控制记录,但我们可以控制配置中的投掷/抛出异常的决定为好。
我们使用自定义的自产自销记录UTIL我们写。 它需要你实现日志记录在自己的无处不在你需要它。 但是,它也可以让你捕捉到的不仅仅是异常多。
例如我们的代码是这样的:
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数据库。 我们必须在DB级别设置电子邮件警报,以寻找某些错误或经常发生的错误。 它可以帮助我们识别正是错误的来源。
这可能不是你在寻找什么。 类似于使用Global.asax中的另一种方法是向我们代码注入技术,像AOP与PostSharp 。 这使您可以在每个方法的开始和结束或每个异常注入的自定义代码。 这是一个有趣的方法,但我认为它可能有一个沉重的性能开销。