将ILoggingFactory注入服务库

时间:2016-11-09 19:32:40

标签: serilog loggerfactory

我有一个控制台应用程序,我正在使用Serilog。我正在尝试将日志记录注入我的服务库,但我从未看到日志消息。当我逐步完成代码时,即使我正在创建一个Singleton LoggerFactory,该库也正在创建一个新的工厂实例。

控制台应用

ILoggerFactory loggerFactory = new LoggerFactory();
loggerFactory.AddSerilog(GetLoggerConfiguration());
_loggerIdentity = loggerFactory.CreateLogger<WorkerBroker>();

IServiceCollection services = new ServiceCollection();
services.TryAddSingleton<ILoggerFactory, LoggerFactory>();
_provider = services.BuildServiceProvider();

// Inject my service
var service = ActivatorUtilities.CreateInstance<MyService>(_provider);

正在进行注入的服务的构造函数(在库中)

public MyService(ILoggerFactory loggerFactory)
{
    _logger = loggerFactory.CreateLogger<WebCreditService>();
}

稍后在服务中,我将尝试记录日志中的内容并且没有显示,但我确实看到来自控制台应用程序的消息。

2 个答案:

答案 0 :(得分:0)

我能够做更多的研究,实际上我只需要将我创建的记录器工厂添加到ServicesCollection。

ILoggerFactory loggerFactory = new LoggerFactory();
loggerFactory.AddSerilog(GetLoggerConfiguration());
_loggerIdentity = loggerFactory.CreateLogger<WorkerBroker>();

IServiceCollection services = new ServiceCollection();
services.AddSingleton(loggerFactory);
_provider = services.BuildServiceProvider();

答案 1 :(得分:0)

试试这个:

//添加控制台日志记录             serviceCollection.AddSingleton(new LoggerFactory()                 .AddConsole(configuration.GetSection( “记录”))                 .AddSerilog()                 .AddDebug());             serviceCollection.AddLogging();

        // Add Serilog logging           
        Log.Logger = new LoggerConfiguration()
            .WriteTo.RollingFile(configuration["Serilog:LogFile"])
            .ReadFrom.Configuration(configuration)
            .CreateLogger();

但你也必须考虑appsettings文件中的配置。

见到这里: https://www.codeproject.com/Articles/1218350/Elasticsearch-Kibana-and-Docker-using-NET-Standard