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

如何阻止ExceptionHandlerMiddleware异常写入Windows事件日志

问题描述

我有一个使用Serilog将所有日志写入文件的ASP.NET Core 8 Web API,在program.cs中通过以下代码配置全局错误处理:

app.UseExceptionHandler(new ExceptionHandlerOptions() 
{  
    AllowStatusCode404Response = true, 
    ExceptionHandlingPath = "/error" 
});

我看到多篇文章提到,在appsettings中添加以下配置可阻止ExceptionHandlerMiddleware日志生成:

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

但每当抛出异常时,日志会同时写入Serilog文件和事件日志,事件日志内容如下:

Category: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware
EventId: 1

SpanId: 436cfbe67205ba87

TraceId: 74e004a439b069b40d366019bc429ac3

ParentId: 0000000000000000

ConnectionId: 0HN6V3VNU8A4U

RequestId: 0HN6V3VNU8A4U:00000001
RequestPath: /QAReleaseAhead/Profile

An unhandled exception has occurred while executing the request.

请问我哪里配置出错了?


问题原因与解决方案

核心原因

你当前配置的"Microsoft.AspNetCore": "None"范围过于宽泛,且ASP.NET Core日志配置优先级、Serilog与默认日志提供程序的整合逻辑可能导致规则未生效。另外,事件日志的写入大概率来自ASP.NET Core默认日志提供程序,而非Serilog,你可能未禁用该提供程序的输出。

具体解决步骤

  1. 精准过滤ExceptionHandlerMiddleware日志
    在appsettings.json中直接指定目标日志类别,替代宽泛的命名空间配置:

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

    精准配置能避免影响其他ASP.NET Core组件的日志输出,稳定性更强。

  2. 禁用默认日志提供程序,确保Serilog独占日志输出
    在Program.cs配置Serilog时,通过writeToProviders: false阻止日志流向默认提供程序:

    var builder = WebApplication.CreateBuilder(args);
    
    // 配置Serilog并禁用默认日志提供程序
    builder.Host.UseSerilog((context, configuration) =>
        configuration.ReadFrom.Configuration(context.Configuration),
        writeToProviders: false);
    
    // 其他服务配置
    builder.Services.AddControllers();
    
    var app = builder.Build();
    
    // 全局错误处理配置
    app.UseExceptionHandler(new ExceptionHandlerOptions() 
    {  
        AllowStatusCode404Response = true, 
        ExceptionHandlingPath = "/error" 
    });
    
    app.MapControllers();
    app.Run();
    

    该设置会让所有日志仅通过Serilog输出到文件,彻底阻止默认提供程序写入事件日志。

  3. 检查环境配置冲突
    若项目存在appsettings.Development.json等环境特定配置文件,需确认这些文件中未覆盖Logging节点的配置,避免主配置文件的规则被无效化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:57:33