如何在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
相关产品推荐
相关产品推荐

