将多个依赖项注入容器与 NLog 一起使用时无输出
No output when using multiple dependency injection containers with NLog
我已经通过依赖注入设置了 NLog,一个地方,我注入记录器的地方是我的主要 Class Application
,在这个 class 我已经创建了我的套接字服务器的实例,我在接受连接或错误等方面有事件......这些事件设置在 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 设置配置文件。或者创建多个隔离的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 的问题。
我已经通过依赖注入设置了 NLog,一个地方,我注入记录器的地方是我的主要 Class Application
,在这个 class 我已经创建了我的套接字服务器的实例,我在接受连接或错误等方面有事件......这些事件设置在 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 设置配置文件。或者创建多个隔离的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 的问题。