NLog:它不登录另一个线程吗?

问题描述 投票:0回答:1

我已经通过依赖项注入设置了NLog,在一个地方,我将记录器注入的地方是我的主要类Application,在该类中,我创建了Socket Server的实例,其中发生了关于Accept connection或error等事件。 on ...这些事件在Application中设置。

例如,OnAccept事件当然是由另一个线程处理的,其中正在监听连接。调用此事件后,一切都会按预期进行,但是记录器不会在日志中写入任何内容。如果我使用的不是记录器Console.WriteLine(),它会写入所有内容,因此将正确调用此事件(甚至通过调试检查)。

这是NLog / ILogger<>中的某个内容,它无法从另一个线程写入日志?以及在这种情况下如何使用它?

c# events logging nlog
1个回答
0
投票

所以,这个问题实际上是隐藏的,我在使用DI创建多个作用域,所以通过这种方式创建是行不通的:

 var serviceCollection = new ServiceCollection();
 serviceCollection.AddLogging(builder =>
 {
    builder.ClearProviders();
    builder.SetMinimumLevel(LogLevel.Trace);
    builder.AddNLog($"{ConfigBasePath}/{NlogConfig}");
});

有两种解决方案,使用静态LogManager设置配置文件,创建一个共享的NLogFactory,而不是为每个DI容器创建而创建。或通过以下代码创建多个隔离的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上的问题。

© www.soinside.com 2019 - 2024. All rights reserved.