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

如何在ASP.NET中记录捕获抛出的异常信息?

修改方法

你当前的写法会完全丢弃原始异常e的所有上下文信息,包括错误文本、调用堆栈等,可根据你的业务需求选择以下两种修改方案:

方案1:将原始异常作为内部异常保留(推荐)

如果需要自定义错误提示同时保留完整的原始异常信息,直接把e作为第二个参数传入Exception的构造函数即可:

catch(Exception e)
{
    // 第二个参数为内部异常,后续可通过新异常的InnerException属性获取原始异常的全部内容
    throw new Exception("error", e);
}

这种方式下,新异常调用ToString()时会自动拼接原始异常的错误文本和调用栈,主流日志框架记录该异常时也会自动带出所有原始信息,不需要手动拼接内容。

方案2:直接在catch块中读取原始异常内容记录

如果不需要重新抛出异常,只是要把原始异常的内容写入日志,直接访问e的对应属性即可:

// 示例使用ASP.NET Core内置的ILogger,实际可替换为你用的任意日志组件
catch(Exception e)
{
    // 记录完整的异常信息(包含错误文本+调用栈,推荐排查问题用)
    _logger.LogError(e, "业务执行出错");
    // 仅获取异常的错误文本可以访问e.Message属性
    // string errorText = e.Message;
    
    // 不需要抛出的话可以省略下面这行
    throw new Exception("error", e);
}

额外注意点

  • 不要仅把e.Message拼接到新异常的消息文本中,这种方式会丢失调用栈等关键排查信息,优先选择传入内部异常的方案。
  • 如果你不需要自定义错误消息,不需要新建Exception实例,直接写throw;即可完整保留原始异常的所有上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:07