从Program.cs中的appsettings获取序列号设置



我正在使用.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();
}

这看起来像是用于两阶段初始化的部分代码。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>();
});

最新更新