【问题标题】:C# .NET Core 3.1 Serilog usage in BackgroundServiceBackgroundService 中的 C# .NET Core 3.1 Serilog 使用
【发布时间】:2022-07-06 23:09:54
【问题描述】:

按照有关如何使用 Serilog 的教程,我从 appsettings.json 文件中读取了设置 - 当事情很简单时,以下所有内容都运行良好:

主程序(简单 MVP 版本):

public static void Main(string[] args)
{
//Read Configuration from appSettings    
var config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
//Initialize Logger    
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(config).CreateLogger();

try
{
    Log.Information("Starting up the service");
    CreateHostBuilder(args).Build().Run();
....
 public static IHostBuilder CreateHostBuilder(string[] args) =>
     Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    .ConfigureServices((hostContext, services) =>
    {
        services.AddHostedService<Worker>();
    })
    .UseSerilog();

然后是带有BackgroundService的类:

....
using Microsoft.Extensions.Logging;//and not Serilog!!

public class Worker : BackgroundService
{
    private readonly ILogger _logger;
   ....


    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

----------对我来说简单的事情到此结束:-) ----------------- ------------------

现在,我想从第一个 MVP 构建一个“真正的”程序 - 根据 SOLID 原则将函数放置在单独的类中。例如,我的第一个类是 ConfigurationCollector,从 appsettings.json 文件中收集所有相关参数我放在一个单独的班级。该类工作并完成工作 - 但我希望日志记录工作 - 我尝试使用跨类使用的所有已配置的 Serilog 记录器(就像我对 ILogger 所做的那样,以便 Worker 对象创建一个新的 ConfigurationCollector 类,如

public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
        _configCollector = new ConfigCollector(logger);
    }

我知道 logger 现在是一种

ILogger<ConfigCollector> 

不是

ILogger<Worker> 

但是如何将服务启动时的原始 Serilog 注入到使用的每个类中,以便在日志中正确显示对象?

    public class ConfigCollector
    {
       private readonly ILogger<ConfigCollector> _logger;     
       ....
    public ConfigCollector(ILogger<ConfigCollector> logger)
    {
        _logger = logger;
    }
       
 

【问题讨论】:

    标签: serilog background-service ilogger


    【解决方案1】:

    .NET 6 后台服务

    .UseSerilog((builder, loggerConfig) =>
            loggerConfig.ReadFrom.Configuration(builder.Configuration))
    .Build();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多