ASP.NET Core 异常处理程序中间件不再默认记录由 IExceptionHandler 处理的异常诊断。
已引入的版本
.NET 10 预览版 7
以前的行为
以前,异常处理程序中间件记录了有关 IExceptionHandler 处理的异常的诊断信息。
异常诊断信息为:
- 日志记录
UnhandledException到 ILogger. - 将
Microsoft.AspNetCore.Diagnostics.HandledException事件写入Microsoft.Extensions.Logging.EventSource. - 将
error.type标记添加到http.server.request.duration指标。
新行为
从 .NET 10 开始,如果 IExceptionHandler.TryHandleAsync 返回 true,则默认情况下不再记录异常诊断。
破坏性变更的类型
此更改为行为更改。
更改原因
ASP.NET 核心用户已提供反馈,指出以前的行为是不可取的。 其 IExceptionHandler 实现报告了异常已处理,但错误处理中间件仍记录应用遥测中的错误。
ASP.NET Core 现在通过在 IExceptionHandler 处理异常时抑制诊断,来遵循用户预期的行为。 还可以根据需要使用配置选项来自定义异常诊断行为。
建议的措施
如果您希望在处理异常时继续记录遥测数据,可以使用新的 ExceptionHandlerOptions.SuppressDiagnosticsCallback 选项:
app.UseExceptionHandler(new ExceptionHandlerOptions
{
SuppressDiagnosticsCallback = context => false;
});
context传递给回调的信息包括有关异常、请求以及是否处理异常的信息。 回调返回 false 表示不应抑制诊断,从而恢复以前的行为。