【发布时间】:2009-04-16 21:15:49
【问题描述】:
我正在测试 ELMAH,并特意在我的应用程序中关闭了 ELMAH 日志的数据库连接,以查看如果数据库不可用在生产中会发生什么。
似乎 ELMAH 无法捕获自己的错误 - 当 SQL 数据库日志失败时,AXD 文件不可用。
如果数据库不可用,ELMAH 的预期行为是什么?
如果发生这种情况,我该如何诊断我的错误?
【问题讨论】:
-
+1 用于在最坏的情况发生之前考虑/测试它们!
我正在测试 ELMAH,并特意在我的应用程序中关闭了 ELMAH 日志的数据库连接,以查看如果数据库不可用在生产中会发生什么。
似乎 ELMAH 无法捕获自己的错误 - 当 SQL 数据库日志失败时,AXD 文件不可用。
如果数据库不可用,ELMAH 的预期行为是什么?
如果发生这种情况,我该如何诊断我的错误?
【问题讨论】:
看来ELMAH不能自己陷进去 错误
ELMAH 确实在某种程度上捕获了自己的错误。如果ErrorLogModule 在尝试记录错误时遇到异常,则记录导致的异常将发送到标准的 .NET Framework 跟踪工具。请参阅line 123 from 1.0 sources. 另请参阅 ASP.NET 文档中的以下演练,以获取标准 .NET Framework 跟踪与 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 跟踪工具。
如果出现这种情况,我该如何诊断我的错误 发生了吗?
这里最好的选择是启用错误记录和电子邮件。如果数据库已关闭,则邮件网关很可能已启动,您仍会收到错误通知。实际上,这些错误会在某些邮箱中记录。这还有一个额外的好处,如果邮件网关曾经关闭,那么数据库很可能会启动并且错误会在那里记录。但是,如果两者都出现故障,那么您将需要认真检查您的生产基础架构,并可能采取措施通过其他措施监控系统的运行状况。
【讨论】:
不太确定 ELMAH 但此类日志记录框架的预期行为是在出现问题时不会抛出任何异常。 IE。如果 ELMAH 的数据库出现故障,我假设它不会将错误记录到数据库中。
如上所述,您可以/应该使用替代接收器 - 电子邮件或平面文件。
【讨论】:
您始终可以使用 xml 文件选项来记录您的错误。
【讨论】:
我认为你有点混淆了上下文。
如果数据库不可用,ELMAH 的行为是不将错误记录到数据库中。如果在服务器上引发异常,或者您通过 ErrorSignal 引发异常,ELMAH 将使该异常通过黄屏或自定义错误页面(您的设置)。
由于 Errors.axd 页面只有那些应该看到它的人才能访问(理想情况下),所以可以将该错误呈现给用户。
底线是,如果错误数据库已关闭,您将无法诊断错误。对我们来说,如果是这样的话,我们会遇到更大的问题,因为错误数据库位于生产数据库中。
【讨论】: