2012-01-13 46 views
0

我们有一个ASP.NET webforms应用程序,它具有try/catch块。在catch块中,它会调用一个方法来发送包含有关所抛出错误的有限信息的电子邮件。如何在使用大量try/catch块的ASP.NET web应用程序中实现ELMAH?

我们希望在这个应用程序中实现ELMAH,但ELMAH只能用于未处理的异常(根据我的经验,至少)。我想要做的是,不是从应用程序中删除所有try/catch块,而是将发送电子邮件的方法中的代码替换为ELMAH的调用,这将迫使ELMAH发送电子邮件,就好像该例外未处理。它看起来就像普通电子邮件一样,包含堆栈跟踪,认证用户,引用URL等。

回答

2

如果您处理异常,ELMAH将不会收到它。

ELMAH的设计不是完整的日志记录框架,而是与一个log4net一起工作。

不要试图强迫ELMAH进入这个角色,而应考虑为处理的异常使用专用的日志记录框架。

可以从您的处理代码信号ELMAH如果你真的需要,如this answer描述does elmah handle caught exceptions as well

ErrorSignal.FromCurrentContext().Raise(ex); 
+0

很好的回答。很高兴你编辑它。我最初的想法是抛出异常,但使用ELMAH的构造更好。值得注意的是,上述内容位于Elmah命名空间中。 – oscilatingcretin 2012-01-13 14:06:39

+0

@ scilatingcretin - 公平点,但从上下文应该清楚。 – Oded 2012-01-13 14:07:30

+0

我注意到使用上面的.Raise()方法不会触发重定向到我的自定义错误页面。调用'Throw ex',但ELMAH产生的堆栈跟踪有些模糊。有没有办法让ELMAH的.Raise()方法触发重定向? – oscilatingcretin 2012-01-13 14:40:09

相关问题