2009-11-18 208 views
0

我在我的web应用程序中有一些代码来处理未处理的异常 - 它交给了一个花哨的自定义错误页面,它记录了详细信息。但是如果在自定义错误页面中有未处理的异常怎么办?如何处理异常处理代码中的异常?

我可以通过检查Request.CurrentExecutionFilePath是否等于我的自定义错误页面,在我的一般异常处理程序中检测到这种情况,从而采取措施避免该循环。但任何想法这些步骤应该是 - 回到死亡的黄色屏幕,交给一个静态的自定义错误页面?

或者我应该只是将自定义错误页面代码包装在try {...} catch {}中,不要再担心了吗?

+0

任何异常日志代码本身应该放在 尝试{} 赶上 (异常前) {// 无能为力这里 } 空catch块。 某些时候,“疯狂的事情”可能发生在异常日志记录代码中。 – PRR 2009-11-18 12:23:36

回答

0

将您的自定义错误代码页封装在try {...} catch {doSomethingThatCannotPossiblyFail()}构造中。

+0

假设有人稍后出现并忽略文件中的所有注释,并添加一些代码,可以在catch {...}块或try {...} catch {...}之外引发异常。也许我太过分了,不想为这种可能性辩护... – noj 2009-11-18 12:24:50

+0

这种方法的问题是,如果例外已经到了这么远(即500页),那么唯一的想法可能是可能的,就是在这个阶段吞下例外,这从来都不是一个好主意。它只是登录远征队而不是通过自定义的500页告知用户失败 – Sheff 2009-11-18 13:02:04

+0

jdt199:这就是为什么我的答案catch块不是空的;-)完全吞咽是一个坏主意,同意。 – 2009-11-18 13:11:14

2

我会使用.nets自定义错误框架,并设置一个静态HTML文件作为500错误的目标。有一个自定义的500页面做任何可能失败的主意是不好的,因为它的任何io命令已经失败了(比如数据库或文件访问)。

它总是最好保留自定义500页作为简单的html文件,并通过应用程序global.asax中的Application_Error事件执行所有异常记录,允许引发异常,然后使用.net自定义异常处理程序提供您的自定义页。

编辑:这是上述模式的相关文章。请注意,唯一的区别就是我会用一个静态的html页面500

http://devhood.com/tutorials/tutorial_details.aspx?tutorial_id=237

0

老实说这一切取决于你的记录机制的波动性,以及如何糟糕,你要记录的错误。因为它基于程序外部的某些工作(例如,数据库可用,可访问日志文件,事件日志未满等),因此总会有可能导致日志记录失败。如果没有其他原因阻止向用户显示巨大的恶意错误,那么您应该将您的日志记录在try catch块中。

就我个人而言,我会放入多个日志记录路径。第一个可能是数据库(尽管我个人不喜欢将错误记录到数据库,我更喜欢日志文件),第二个是事件日志,并尝试发送一封电子邮件,指出某些错误。没有确定的方法可以说我的日志记录到外部源绝对不会失败,但是您可以最大限度地减少这种可能性,并确保无论最终用户发生什么情况,都不会看到灾难性故障错误。