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

如何在.NET 6控制台应用Serilog配置中消除IConfiguration冗余

.NET 6控制台应用消除Serilog配置冗余的方案

方案一:复用Host构建流程中的配置实例

无需提前单独创建IConfiguration变量,直接在Host构建链中复用已生成的配置:

using Microsoft.Extensions.Hosting;
using Serilog;

var host = Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((context, configBuilder) =>
    {
        // 在这里添加自定义配置源,比如额外的JSON文件、环境变量等
        configBuilder.AddJsonFile("serilog-custom.json", optional: true, reloadOnChange: true);
    })
    .UseSerilog((context, loggerConfig) =>
    {
        // 通过HostBuilderContext直接获取已构建好的配置,无需提前实例化
        loggerConfig.ReadFrom.Configuration(context.Configuration);
    })
    .ConfigureServices((context, services) =>
    {
        // 服务配置环节同样可以复用该配置实例
        services.Configure<ServiceSettings>(context.Configuration.GetSection("ServiceSettings"));
        services.AddScoped<IMyService, MyService>();
    })
    .Build();

await host.RunAsync();

方案二:简化版配置复用(默认配置源场景)

如果Serilog配置直接放在默认配置文件(如appsettings.json)中,可进一步简化代码:

using Microsoft.Extensions.Hosting;
using Serilog;

var host = Host.CreateDefaultBuilder(args)
    .UseSerilog((hostingContext, loggerConfig) =>
    {
        loggerConfig
            .ReadFrom.Configuration(hostingContext.Configuration)
            .Enrich.FromLogContext();
    })
    .ConfigureServices(services =>
    {
        services.AddScoped<IMyService, MyService>();
    })
    .Build();

await host.RunAsync();

关键说明

  • 核心逻辑:UseSerilog的重载方法提供HostBuilderContext参数,该上下文已包含ConfigureAppConfiguration环节构建完成的IConfiguration实例,彻底避免配置重复创建。
  • 这种方式让Serilog与其他服务共享同一套配置源,保证配置的一致性。
  • 若需扩展配置源,仅需在ConfigureAppConfiguration中添加,后续所有环节(Serilog、服务配置等)均可直接复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:40:27