>我通过依赖注入设置了 NLog,一个地方,我注入记录器是我的主要类Application
,在此类中,我创建了我的套接字服务器的实例,其中我在接受连接或错误等情况下有事件......这些事件在Application
中设置。
例如,OnAccept
事件当然由另一个线程处理,其中侦听连接正在运行。调用此事件时,一切都按预期进行,但记录器不会在日志中写入任何内容。如果我使用而不是记录器Console.WriteLine()
,它会写入所有内容,因此正确调用此事件(即使通过调试也进行检查(。
NLog/ILogger<>
中的东西,它不能从另一个线程写入日志?在这种情况下如何使用它?
所以,问题实际上是隐藏的,我正在使用 DI 来创建多个范围,因此通过这种方式创建不起作用:
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder =>
{
builder.ClearProviders();
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddNLog($"{ConfigBasePath}/{NlogConfig}");
});
有两种解决方案,创建一个共享的 NLogFactory,而不是每个 DI 容器创建,使用静态 LogManager 设置配置文件。或者通过以下代码创建多个隔离的日志工厂:
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 上的问题。