【问题标题】:Elmah Raise() records inner exceptionElmah Raise() 记录内部异常
【发布时间】:2019-03-02 07:18:34
【问题描述】:

我正在尝试像这样使用 Elmah 引发异常:

try
{
    Foo();
}
catch (WebException ex)
{
    var nex = new Exception("Foo failed", ex);
    Elmah.ErrorSignal.FromCurrentContext().Raise(nex);
}

但是,Elmah 记录的是内部异常ex,而不是我的新包装异常nex,即生成的数据库记录具有:

Type = "System.Net.WebException", Message = "The remote server returned an error: (400) Bad Request."

而不是像我期望的那样:

Type = "System.Exception", Message = "Foo failed"

到底发生了什么?

【问题讨论】:

  • elmah 的配置在哪里?
  • 在 web.config 中
  • 你能在测试项目中重新创建它吗?
  • 请您添加配置设置。

标签: c# asp.net .net elmah


【解决方案1】:

ELMAH 在异常列表 (/elmah.axd) 上显示内部异常的类型。如果您单击错误消息旁边的详细信息链接,我很确定您会看到如下内容:

System.Exception: Foo failed ---> System.Net.WebException

我刚刚创建了一个测试项目并验证了这是经验行为。

编辑:正如在 cmets 中所讨论的,在 Type 和 Message 字段中使用的基本异常似乎是 intended behavior

【讨论】:

  • 详细信息页面确实显示了您所描述的包装器异常,它似乎来自 AllXml 列的 Detail 属性。然而,列表视图中显示的类型和消息字段仅用于内部异常。
  • 我相信这是预期的行为:github.com/elmah/Elmah/blob/1x/src/Error.cs#L91
  • 看来,这对我来说似乎是一个奇怪的选择,但你去吧。
  • 也许吧。也许不是:) 基本异常实际上来自错误的起源。外部异常可能是 WebException、AggregateException 或类似的,其自身信息不多。这可能是口味问题,但我明白他们为什么会深入研究基本例外。
猜你喜欢
  • 2011-06-04
  • 1970-01-01
  • 2010-10-23
  • 2017-11-01
  • 2015-11-11
  • 2014-03-26
  • 2011-03-01
  • 2015-11-11
相关资源
最近更新 更多