从 Program.cs 中的 appsettings 获取 Serilog 设置

发布于 2025-01-13 08:54:12 字数 1188 浏览 4 评论 0原文

我正在使用 .Net Core 6 Worker 项目创建 Windows 服务。

我已经添加了正在运行的 Setilog,并且我在 appsettings.json 中有设置。但是,我想在启动和停止服务时写入日志文件。我在 program.cs 中有以下代码,它似乎可以工作,但这并没有使用 appsettings.json 中的设置。是否可以从 appsettings.json 获取设置,而不是将它们添加到此初始 Serilog 设置中?

using Serilog;
using Serilog.Events;

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information)
    .Enrich.FromLogContext()
    .WriteTo.File("./logs/log-.txt", rollingInterval:RollingInterval.Day)
    .CreateBootstrapLogger();

try
{
    Log.Information("Starting the Service");

    IHost host = Host.CreateDefaultBuilder(args)
        .UseWindowsService()
        .UseSerilog()
        .ConfigureServices(services =>
        {
            services.AddHostedService<Worker>();
        })
        .Build();

    await host.RunAsync();
    return;
}
catch (Exception ex)
{
    Log.Fatal(ex, "There was a problem starting the service");
    return;
}
finally
{
    Log.Information("Service successfully stopped");
    Log.CloseAndFlush();
}

I am creating a Windows Service using a .Net Core 6 Worker project.

I have added Setilog which is working, and I have settings in appsettings.json. However, I would like to write to the log file when starting and stopping the service. I have the following code in program.cs, which seems to work, but this does not make use of the settings in appsettings.json. Is it possible to get the settings from appsettings.json instead of adding them to this initial Serilog setup?

using Serilog;
using Serilog.Events;

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information)
    .Enrich.FromLogContext()
    .WriteTo.File("./logs/log-.txt", rollingInterval:RollingInterval.Day)
    .CreateBootstrapLogger();

try
{
    Log.Information("Starting the Service");

    IHost host = Host.CreateDefaultBuilder(args)
        .UseWindowsService()
        .UseSerilog()
        .ConfigureServices(services =>
        {
            services.AddHostedService<Worker>();
        })
        .Build();

    await host.RunAsync();
    return;
}
catch (Exception ex)
{
    Log.Fatal(ex, "There was a problem starting the service");
    return;
}
finally
{
    Log.Information("Service successfully stopped");
    Log.CloseAndFlush();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尛丟丟 2025-01-20 08:54:12

这看起来像是用于两阶段初始化的代码的一部分。 CreateBootstrapLogger() 用于创建一个记录器,该记录器只能在 .NET Core 的日志记录基础结构配置完毕并正常运行之前使用。

using Serilog;
using Serilog.Events;

public class Program
{
    public static int Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateBootstrapLogger();

两阶段初始化文档展示了如何使用 ReadFrom.Configuration

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseSerilog((context, services, configuration) => configuration
                
                .ReadFrom.Configuration(context.Configuration)
                
                .ReadFrom.Services(services)
                .Enrich.FromLogContext()
                .WriteTo.Console())
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

This looks like part of the code used for two-stage initialization. CreateBootstrapLogger() is used to create a logger that can be used only until .NET Core's logging infrastructure is configured and functional.

using Serilog;
using Serilog.Events;

public class Program
{
    public static int Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateBootstrapLogger();

The Two-stage initialization docs show how to read settings using ReadFrom.Configuration in the main logger configuration :

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseSerilog((context, services, configuration) => configuration
                
                .ReadFrom.Configuration(context.Configuration)
                
                .ReadFrom.Services(services)
                .Enrich.FromLogContext()
                .WriteTo.Console())
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文