[英]No output when using multiple dependency injection containers with NLog
我已经通过依赖注入设置了 NLog,在一个地方,我注入记录器是我的主要 Class Application
,在这个 class 中,我创建了我的套接字服务器的实例,在那里我有关于接受连接或错误等等的事件......这些事件在Application
中设置。
例如OnAccept
事件当然是由另一个线程处理的,监听连接在哪里运行。 调用此事件时,所有 go 都应如此,但记录器不会在日志中写入任何内容。 如果我使用而不是记录器Console.WriteLine()
,它会写入所有内容,因此会正确调用此事件(即使通过调试也可以检查)。
它是 NLog/ ILogger<>
中的东西,它不能从另一个线程写入日志? 以及如何在这种情况下使用它?
所以,问题实际上是隐藏的,我使用 DI 创建多个范围,所以通过这种方式创建是行不通的:
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder =>
{
builder.ClearProviders();
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddNLog($"{ConfigBasePath}/{NlogConfig}");
});
有两种解决方案,创建单个共享 NLogFactory,而不是为每个 DI 容器创建,使用 static LogManager 设置配置文件。 或者创建多个隔离的LogFactory,通过这段代码:
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder =>
{
builder.ClearProviders();
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddNLog(serviceProvider => {
var logFactory = new NLog.LogFactory();
logFactory.LoadConfiguration($"{ConfigBasePath}/{NlogConfig}");
return logFactory;
});
});
我在NLog GitHub上的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.