按照有关如何使用Serilog的教程,我从appsettings.json文件中读取了设置

按照有关如何使用 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();
    })
    .UseSerilog();

然后是带有BackgroundService的类:

....
using Microsoft.Extensions.Logging;//and not Serilog!!
public class Worker : BackgroundService
{
    private readonly ILogger _logger;
   ....
    public Worker(ILogger logger)
    {
        _logger = logger;
    }

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

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

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

我知道 logger 现在是一种

ILogger 

不是

ILogger 

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

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

© 版权声明
THE END
喜欢就支持一下吧
点赞236赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容