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

Blazor集成Serilog时出现ConnectionStrings重复键ArgumentException异常的解决方案咨询

解决Serilog添加后Startup重复调用导致的ConnectionStrings键重复异常

这个问题的核心是你修改代码时删掉了原有ConfigureWebHostDefaults中的关键逻辑,并且没有正确整合Serilog的配置顺序,导致Startup被重复注册,进而触发配置键重复的异常。下面是具体的解决方法,完全保留你的原有逻辑并成功添加Serilog功能:

正确的配置代码

你需要在Host.CreateDefaultBuilder之后链式添加UseSerilog,同时完整保留原来ConfigureWebHostDefaults中的所有代码(包括RELEASE环境下的特殊配置),确保UseStartup<Startup>()只被调用一次:

Host.CreateDefaultBuilder(args)
    // 添加Serilog配置,这里可以自定义日志写入规则
    .UseSerilog((hostContext, loggerConfiguration) =>
    {
        loggerConfiguration
            // 从应用配置文件读取Serilog设置(推荐)
            .ReadFrom.Configuration(hostContext.Configuration)
            // 配置日志写入后端文件,可根据需求调整参数
            .WriteTo.File(
                path: "logs/app-.txt",
                rollingInterval: RollingInterval.Day,
                retainedFileCountLimit: 10,
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
            );
    })
    // 完整保留原有WebHost配置逻辑
    .ConfigureWebHostDefaults(webBuilder =>
    {
#if RELEASE
        webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
        webBuilder.UseIISIntegration();
#endif
        webBuilder.UseStartup<Startup>();
    });

为什么你的原有修改会出问题?

你之前的修改直接替换了ConfigureWebHostDefaults的内容,删掉了RELEASE环境下的配置,并且没有正确关联Serilog与宿主配置上下文。这种情况下,宿主初始化时可能会重复加载配置源或者重复注册Startup,导致ConnectionStrings等配置键被重复添加,触发ArgumentException。

额外配置建议

为了让Serilog的配置更灵活,建议在appsettings.json中添加Serilog的配置节点(可以覆盖代码中的硬编码设置):

"Serilog": {
  "MinimumLevel": {
    "Default": "Information",
    "Override": {
      "Microsoft": "Warning",
      "Microsoft.AspNetCore": "Warning",
      "System": "Warning"
    }
  },
  "WriteTo": [
    {
      "Name": "File",
      "Args": {
        "path": "logs/app-.txt",
        "rollingInterval": "Day",
        "retainedFileCountLimit": 10,
        "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
      }
    }
  ]
}

这样调整后,既保留了你原有服务器端的所有逻辑,又成功将Blazor WASM客户端的日志通过Serilog写入后端文件,同时避免了配置键重复的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:57:42