可以从 Program.cs 自定义 Serilog 配置吗?

Custom Serilog config possible from Program.cs?

我在启动构造函数期间在 ASP.NET Core 中生成自定义配置,如下所示:

public Startup(IWebHostEnvironment environment, IConfiguration configuration) {
    Environment = environment;

    // Add extra config - configs added later override ones added earlier when key names clash
    Configuration = new ConfigurationBuilder()
        .AddConfiguration(configuration)
        .AddXmlFile("appsettings.xml")
        .Build();
}

我的问题是,虽然这个新的 IConfiguration 可以从 ConfigureServicesConfigure 访问,但不能从 .UseSerilog() 调用访问 CreateHostBuilder(Program.cs)。因此,我无法在通话时访问我的 XML 配置:

webBuilder
    .UseStartup<Startup>()
    .UseSerilog((context, config) => {
        config.ReadFrom.Configuration(context.Configuration);
    });

我该如何解决这个问题?我可以让 UseSerilog() lambda 可以使用新配置,还是可以稍后在 ConfigureServices()?

中配置记录器

好的,我发现我可以在 IWebHostBuilder 链的前面 .UseConfiguration()(而不是在 Startup 构造函数中)提取我的 XML 配置设置:

webBuilder
    .UseConfiguration(new ConfigurationBuilder().AddXmlFile("appsettings.xml").Build())
    .UseSerilog((context, config) => {
        config.ReadFrom.Configuration(context.Configuration);
    })