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

.NET 8使用IExceptionHandler出现重复异常日志问题求助

解决.NET 8中IExceptionHandler重复日志问题

你遇到的重复日志问题,是因为.NET 8的ExceptionHandler中间件默认集成了DiagnosticsTelemetry组件,它会在自定义异常处理器执行前,先记录一条来自Microsoft.AspNetCore.Diagnostics.DiagnosticsTelemetry.ReportUnhandledException的异常日志。要实现单条异常日志,有以下两种可行方案:

方案一:过滤指定类别的日志(推荐)

通过日志配置直接屏蔽DiagnosticsTelemetry相关的日志输出,这是最安全且无副作用的方式。

如果你使用NLog配置文件(nlog.config)

在<rules>节点中添加一条优先级更高的规则,直接关闭该类别的日志:

<rules>
  <!-- 优先关闭DiagnosticsTelemetry的日志,final="true"表示后续规则不再处理该日志 -->
  <logger name="Microsoft.AspNetCore.Diagnostics.DiagnosticsTelemetry" minlevel="Off" final="true" />
  <!-- 你的其他日志规则 -->
  <logger name="*" minlevel="Trace" writeTo="yourLogTarget" />
</rules>

如果你使用appsettings.json配置日志

在配置文件中添加Logging节点,将指定类别的日志级别设为None:

{
  "Logging": {
    "LogLevel": {
      "Microsoft.AspNetCore.Diagnostics.DiagnosticsTelemetry": "None"
    }
  }
}

方案二:移除DiagnosticsTelemetry服务

如果确认不需要DiagnosticsTelemetry的其他功能,可以直接从服务容器中移除该服务:
在Program.cs的服务注册部分添加:

builder.Services.RemoveAll<DiagnosticsTelemetry>();

注意:此方法可能影响ASP.NET Core的其他遥测相关功能,需谨慎使用。

另外,检查你的自定义GlobalExceptionHandler,确保TryHandleAsync返回true(你当前代码已经做到了),这会告诉框架异常已被处理,避免后续其他默认处理逻辑触发,但DiagnosticsTelemetry的日志是在自定义处理器执行前触发的,所以必须通过上述方法屏蔽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:47:51