当使用NLog的多个依赖注入容器时,没有输出。

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

我通过依赖注入设置了 NLog,其中一个地方,我注入记录器的地方是我的主类。Application在这个类中,我创建了我的Socket服务器的实例,在这里我有接受连接或错误等事件... ... 这些事件被设置在 Application.

例如: OnAccept 事件当然是由另一个线程处理的,那里正在运行监听连接。当这个事件被调用时,所有的事情都如其所愿,但日志器并没有在日志中写任何东西。如果我用 Console.WriteLine()它写下了所有的东西,所以这个事件被正确地调用了(甚至通过调试检查)。

它是NLog中的东西ILogger<>它不能从另一个线程写入日志?在这种情况下如何使用它?

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

所以,问题其实是隐藏的,我是用DI与创建多个scopes,所以通过这种方式创建是不行的。

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

有两种解决方案,创建一个共享的 NLogFactory,而不是为每个 DI 容器创建,使用静态 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.

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