You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ELMAH无法记录try-catch中已处理异常的问题求助

解决ELMAH无法记录已处理(try-catch)异常的问题

ELMAH默认只会捕获未处理的异常——也就是那些没被catch块捕获、最终冒泡到应用全局错误处理管道的异常。而你代码里的异常已经被catch块处理了,自然不会自动触发ELMAH的记录逻辑。要让ELMAH记录这类已处理异常,你需要手动调用ELMAH的API来触发日志记录。

方法1:在catch块中手动调用ELMAH的ErrorSignal

这是最直接的解决方案,只需要在catch块里加一行代码,让ELMAH主动记录当前异常:

首先确保你已经引用了ELMAH的命名空间:

using Elmah;

然后修改你的Login Action:

[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model)
{
    try
    {
        throw new Exception("Log me elmah");
    }
    catch (Exception e)
    {
        // 手动触发ELMAH记录异常
        ErrorSignal.FromCurrentContext().Raise(e);
        
        ModelState.AddModelError("", "Something unexpected happened, please try again.");
        return View(model);
    }
}

为什么这个方法有效?

ErrorSignal.FromCurrentContext().Raise(e)会模拟异常冒泡到ELMAH的处理管道,就算异常已经被你捕获处理,ELMAH依然会按照你配置的规则(比如写入数据库、XML文件等)记录这个异常。

额外检查点

如果添加代码后还是没记录,建议确认:

  • 你已经正确安装并配置了ELMAH(比如通过NuGet安装Elmah.MVC,并确保web.config里的ELMAH节点配置正确)
  • 当前上下文有效(比如在MVC Action里,HttpContext.Current不为null,FromCurrentContext()能获取到正确的上下文)

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:45:34