。Net核心工作程序服务将日志记录插入.Net标准库类中

问题描述 投票:0回答:2

我正在尝试将我的Serilog Logger从.NET Core Worker Service项目注入到.Net Standard 2.0库类中。但是,无论何时创建该类,它都不会接收记录器。 (默认设置为null)因此,每当尝试使用记录器时,我都会得到一个值为null的错误。

有人可以帮忙吗?下面的主机生成器

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    .ConfigureServices((hostContext, services) =>
    {
        IConfiguration configuration = hostContext.Configuration;
        ConfigDto configDto = configuration.GetSection("AppSettings").Get<ConfigDto>();
        services.AddSingleton(configDto);
        services.AddHostedService<Service>();
    })
    .UseSerilog();
}

Worker项目中的类,它调用SetManager,它是.NET标准库中的类。

public Service(ConfigDto config, ILogger<Service> logger = null)
{
    _logger = logger;
    _logger.LogTrace("Service object created");

    try
    {
        _logger.LogTrace("Getting config");
        _config = config;
    }
    catch (Exception ex)
    {
        _logger.LogCritical("Unable to load configuration. Stopping service:\n{0}", ex.Message);
        Stop();
    }
    _setManager = new SetManager(_config);
    _setManager.ReadyToProcess += SetManager_ReadyToProcess;
}

SetManager构造函数

public SetManager(ConfigDto config, ILogger<SetManager> logger = null)
{
    _logger = logger;
    _config = config;
    _productList = GetProducts();

    _timer.Interval = 3000;
    _timer.Elapsed += Timer_Elapsed;
}
c# logging .net-core dependency-injection serilog
2个回答
0
投票

如果Logger类对象为“ null”,则无法访问其属性,因此无法进行日志记录。如果记录器对象为空,而您想记录他,则可以使用其他来源。


-1
投票

根据您的评论

Service类使记录器注入良好。它的布景经理没有接收记录器的类。

如果不通过,如何接收?

_setManager = new SetManager(_config);

更改为

_setManager = new SetManager(_config, _logger);
© www.soinside.com 2019 - 2024. All rights reserved.