2009-04-16 21 views
12

我正在测试ELMAH,并故意关闭数据库连接,查看我的应用程序中的ELMAH日志,看看如果数据库不可用,生产中会发生什么情况。ELMAH SQL错误处理程序数据库不可用 - 记录会发生什么情况?

似乎ELMAH不能捕获自己的错误 - 当SQL数据库日志失败时,AXD文件不可用。

如果数据库不可用,ELMAH的预期行为是什么?

如果发生这种情况,我该如何诊断我的错误?

+1

+1在思考/测试最坏情况下的情景之前! – 2009-04-16 21:44:29

回答

0

对ELMAH并不确定,但是这种日志框架的预期行为是,如果出现问题时不会抛出任何异常。即如果ELMAH的数据库关闭,我会认为它不会将错误记录到数据库。

如上所示,您可以/应该使用替代接收器 - 电子邮件或平面文件。

0

您可以随时使用xml文件选项记录您的错误。

0

我认为你有混合的上下文。

如果数据库不可用,ELMAH的行为是不将错误记录到数据库。如果在服务器上抛出异常,或者您通过ErrorSignal引发异常,ELMAH将让该异常通过黄色屏幕或自定义错误页面(您的设置)。

由于Errors.axd页面只能由那些应该看到它的人访问(理想情况下),向用户显示该错误是可以的。

底线是,如果错误数据库已关闭,则无法诊断错误。对于我们来说,如果是这样的话,我们会遇到更大的问题,因为错误数据库位于生产数据库中。


我还会主张不要使用XML日志记录作为主日志记录源。 SQL服务器将为您提供最佳性能,而无需管理文件。使用XML日志记录并非如此。

+0

在web \ bin目录中使用ELmah.dll进行调试时,Web应用程序在无法访问数据库时,在其中一个elmah源文件(由elmah.pdb中的信息指示)中抛出错误。所以 - 它会抛出一个未处理的异常。其他ELMAH采伐者是否会在这种情况下工作? – Caveatrob 2009-04-16 22:29:41

12

似乎ELMAH不能捕获它自己 错误

ELMAH做陷阱了自己的错误,在一定程度上。如果ErrorLogModule在尝试记录错误时遇到异常,则记录产生的异常将发送到标准.NET Framework跟踪工具。见line 123 from 1.0 sources.另请参见以下演练从ASP.NET文档获取标准.NET框架跟踪使用ASP.NET跟踪:

Walkthrough: Integrating ASP.NET Tracing with System.Diagnostics Tracing

的AXD文件不可用时, SQL数据库日志失败。

这是正确的。在使用SqlErrorLog时,SQL Server数据库连接必须可用于查看存储在SQL Server数据库中的错误。

如果数据库不可用,ELMAH 的预期行为是什么?

例如,如果SQL Server数据库关闭,在日志记录过程中将发生SqlException。然后,ELMAH将发送SqlException对象内容到标准的.NET Framework跟踪工具。

如果发生此 问题,如何诊断我的错误?

这里最好的选择是也启用记录通过电子邮件发送错误。如果数据库关闭,邮件网关启动并且您仍然会收到错误通知。实际上,这些错误将在某些邮箱中得到记录。这还具有额外的优点,即如果邮件网关关闭,那么数据库将会启动并且错误将被记录在那里。但是,如果两者都出现故障,那么您需要认真检查您的生产基础架构,并可能采取措施通过附加措施监控系统的运行状况。

相关问题