2016-11-09 41 views
0

我有一个控制台应用程序,我正在使用Serilog中。我试图注入日志到我的服务库,但我从来没有看到日志消息。看起来,当我单步执行代码时,即使我正在创建一个Singleton LoggerFactory,该库也正在创建一个新的工厂实例。注入ILoggingFactory到服务库

控制台应用程序

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>(); 
} 

在服务后来,我将尝试登录的东西,没有任何显示在日志中,但我做的查看来自Console应用程序的消息。

回答

0

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

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

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

试试这个:

//添加控制台登录 serviceCollection.AddSingleton(新的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