如何在 ASPNET Core 中使用 IniConfigurationProvider 配置 Serilog

How to configure Serilog using the `IniConfigurationProvider` in ASPNET Core

我正在尝试将以 appSettings.json 格式提供的 Serilog 配置示例应用到我的 ASPNET Core Web 应用程序中,该应用程序必须使用 .ini 文件进行配置(使用 Microsoft.Extensions.Configuration.Ini.IniConfigurationProvider`)

我想在输出控制台中查看日志并使用配置文件添加额外的接收器。

我的问题是我不明白如何将嵌套 JSON 语法转换为 INI 文件的平面格式。

Serilog 是在两阶段初始化中创建的。 bootstrap在Program.cs如下:

    Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                .Enrich.FromLogContext()
                .WriteTo.Console()
                .CreateBootstrapLogger();

然后在CreateHostBuilder函数中我用实际配置替换它

    Host.CreateDefaultBuilder(args)
                     .ConfigureAppConfiguration((hostingContext, configuration) => {
                         configuration.Sources.Clear();
                         configuration.AddIniFile(@"config.ini", optional: false, reloadOnChange: false);
                     })
                    .UseSerilog((context, services, configuration) => configuration
                        .ReadFrom.Configuration(context.Configuration)
                        .ReadFrom.Services(services)
                        .Enrich.FromLogContext()
                        .WriteTo.Console())
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })

这就是我现在正在尝试的(没有成功)

    [Serilog]
    Level=Verbose
    
    [Serilog:Using]
    File = "Serilog.Sinks.File"
    
    [Serilog:Write-To]
    File.Path = "C:\myapp\log.txt"
    File.rollOnFileSizeLimit = true
    File.fileSizeLimitBytes = 10000000

.ini 文件的语法不正确。试试这个:

[Serilog]
Level=Verbose

[Serilog:Using]
File = "Serilog.Sinks.File"

[Serilog:WriteTo:File]
Name = "File"
Args:Path = "C:\myapp\log.txt"
Args:RollOnFileSizeLimit = true
Args:FileSizeLimitBytes = 10000000

我已经用一个新的 ASP NET Core 应用程序对其进行了测试,它在我的环境中工作。