将多个依赖项注入容器与 NLog 一起使用时没有输出



>我通过依赖注入设置了 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 上的问题。

最新更新