.NET Core Worker Serilog 内部日志记录 Program.cs

.NET Core Worker Serilog logging inside Program.cs

在 .Net Core 3.1 worker 中,我试图在我的 Program.cs 文件中使用 serilog 进行记录。 Serilog 配置在 appsettings.json 里面,CreateHostBuilder 就像

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureHostConfiguration(builder =>
        {
            builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            builder.AddJsonFile("appsettings.Development.json", optional: true);
        })
        .UseSerilog((hostContext, loggerConfig) => {
            loggerConfig.ReadFrom.Configuration(hostContext.Configuration);
        })
        .ConfigureServices((hostContext, services) =>
        {
            // configuring some services here, and I want to log message to serilog

        })
        .UseWindowsService();

}

我已经设法在 Main class 中使用 Serilog 使用

public static void Main(string[] args)
{
    // CreateHostBuilder(args).Build().Run(); // inital code
    var host = CreateHostBuilder(args).Build();
    // get logger instance
    var logger = host.Services.GetService<ILogger<Program>>();

    try
    {
        logger.LogInformation("Worker started succesfully.");
        host.Run();
    }
    catch (Exception ex)
    {
        logger.LogCritical(ex, "Starting worker failed!");
        Environment.Exit(160);
    }            
}

我想知道如何在 ConfigureServices 中制作 Serilog 日志。 我在 ConfigureServices

中使用过
            var provider = services.BuildServiceProvider();
            var logger = provider.GetService<ILogger<IHostBuilder>>();

但在那之后,我得到了多个文件 - 每个使用 F5 的调试会话两个文件,我想记录一个(每天,已配置):

我已经设法找到解决方案HERE

希望有人会发现它有用:)