Нет вывода при использовании нескольких контейнеров внедрения зависимостей с NLog - PullRequest
0 голосов
/ 26 мая 2020

Я установил NLog через инъекцию зависимостей, одно место, где я ввожу регистратор, - это мой основной класс Application, в этом классе я создал экземпляр моего Socket Server, где у меня есть события при подключении Accept или при ошибке и и так далее ... Эти события устанавливаются в Application.

Например, событие OnAccept, конечно, обрабатывается другим потоком, где выполняется прослушивание соединения. При вызове этого события все go как надо, но регистратор ничего не записывает в журнал. Если я использую вместо регистратора Console.WriteLine(), он записывает все, поэтому это событие вызывается правильно (проверяется даже при отладке).

Это что-то в NLog / ILogger<>, что он не может записывать журнал из другой ветки? И как его использовать в такой ситуации?

1 Ответ

1 голос
/ 27 мая 2020

Итак, проблема была фактически скрыта, я использовал DI для создания нескольких областей видимости, поэтому создание таким способом не работает:

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

Есть два решения, создайте один общий NLogFactory , а не для каждого создания контейнера DI, с использованием stati c 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 .

...