【问题标题】:Use single Elmah.axd for multiple applications with single DB log将单个 Elmah.axd 用于具有单个 DB 日志的多个应用程序
【发布时间】:2010-11-26 16:12:10
【问题描述】:

我们有一个用于存储来自多个应用程序的错误的 SQL 日志。我们已为每个应用程序禁用了 elmah.axd 页面,并希望有一个新应用程序专门显示所有向公共 SQL 日志报告错误的应用程序的错误。

到目前为止,即使所有错误的应用程序都使用公共 SQL 日志,它也只显示来自当前应用程序的错误。有没有人这样做过? elmah 代码中的哪些内容可能需要调整?

【问题讨论】:

  • 感谢您以清晰的方式提出这么好的问题,您已经用 Time machine 接受了我的话。现在已经快 6 到 7 年了。

标签: exception-handling elmah


【解决方案1】:

我假设“SQL 日志”是指 MSSQL Server...如果是这样,实现您想要的最简单的方法可能是编辑在保存错误的 SQL Server 数据库中创建的存储过程。

为了获取错误列表,ELMAH dll 以应用程序名称作为参数调用 ELMAH_GetErrorsXML proc,然后 proc 使用 WHERE [Application] = @Application 过滤返回> 子句。

只需从ELMAH_GetErrorsXML proc 中删除WHERE 子句,无论应用程序如何,都应返回所有错误。

要正确获取单个错误记录,您必须对 ELMAH_GetErrorXML 过程执行相同操作,因为它还按应用程序过滤。

这当然会影响任何应用程序从该特定数据库中检索错误,但我假设在你的情况下你只会有一个,所以这应该很好。

CAVEAT:我没有试过这个,所以我不能保证结果......

【讨论】:

  • 正确!我会看看 sproc 的修改。
【解决方案2】:

是的,它很容易工作。但是,您在 Elmah/Default.aspx 中看不到应用程序名称。我还没有发现它是否可配置 - 只显示一列。

【讨论】:

【解决方案3】:

覆盖默认的 Elmah 处理程序工厂不是问题,这样它就会按应用程序过滤 Elmah 日志。我编写了一个示例应用程序来展示如何使用 MySql:http://diagnettoolkit.codeplex.com/releases/view/103931。你也可以查看post on my blog,我会在其中解释它是如何工作的。

【讨论】:

  • +1 - 这就是应该如何完成的。干净简单,无需修改原始 DDL 脚本或 Elmah 源代码。博客文章解释了这一切。干得好,先生!
  • 这是一个不错的选择。但是,缺点是您仍然只能一次看到一个应用程序的错误,并且您必须预先知道应用程序的名称。如果您想查看所有应用程序中的错误列表(这是我解释问题的方式),这不会这样做,除非我只是没有看到那篇文章。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多