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

使用自定义SerilogRequestLogging中间件无法解析DiagnosticContext服务报错

错误原因

该异常是因为Serilog的DiagnosticContext服务未被注册到ASP.NET Core依赖注入容器中,Serilog.AspNetCore.RequestLoggingMiddleware运行时需要依赖该服务,无法解析时就会抛出对应报错。

前置检查

确保项目和自定义扩展所在的外部类库都已安装最新稳定版的Serilog.AspNetCore Nuget包,排除依赖缺失问题。

解决方案

按照如下步骤操作即可修复:

1. 调整Program.cs中UseSerilog的配置

在现有UseSerilog调用中增加addDiagnosticContext: true参数,开启DiagnosticContext的自动注册逻辑,修改后代码如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseSerilog((provider, context, loggerConfig) =>
                {
                    loggerConfig.Configure(provider, Configuration);
                },
                preserveStaticLogger: false,
                writeToProviders: true,
                addDiagnosticContext: true);
            webBuilder.UseStartup<Startup>();
        });

2. 兼容低版本Serilog.AspNetCore的备选方案

如果你使用的Serilog.AspNetCore版本较低,不支持addDiagnosticContext参数,可以手动在Startup.cs的ConfigureServices方法中注册该服务:

using Serilog.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection.Extensions;

public void ConfigureServices(IServiceCollection services)
{
    // 其他服务注册逻辑...
    services.TryAddSingleton<IDiagnosticContext, DiagnosticContext>();
}

3. 确认中间件注册顺序

UseCustomSerilogRequestLogging必须放在UseRouting之后、认证授权类中间件(如UseAuthorization/UseAuthentication)之前,才能正确获取到请求上下文信息,示例配置如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 异常处理、静态文件、HTTPS跳转等中间件...
    app.UseRouting();
    
    // 请求日志中间件放在此处
    app.UseCustomSerilogRequestLogging();
    
    app.UseAuthentication();
    app.UseAuthorization();
    
    // 端点路由中间件...
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:45:03