我有一个控制台应用程序,我正在使用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>();
}
稍后在服务中,我将尝试记录日志中的内容并且没有显示,但我确实看到来自控制台应用程序的消息。
答案 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