Событие перезагрузки конфигурации NLog не запускается - PullRequest
0 голосов
/ 01 ноября 2019

Я инициализирую NLog из конфигурации, а затем добавляю дополнительную цель и правило с помощью кода. Цель и правило всегда должны быть частью конфигурации, где файл конфигурации может изменяться или не изменяться. Мне нужно в Configuration Reload для вызова моего метода, который добавляет мою дополнительную цель и правило, однако я не могу убедиться, что событие запускается.

Я попытался добавить свои обработчики событий как в LogManager, так и в LogManager.LogFactory, подключил и Reloaded и Changed (хотя мне нужно только Reloaded). Вызывается LogManager.Configurtion = LogManager.Configuration.Reload () с перенастройкой существующих регистраторов, но мои методы событий остаются без вызова.

private static void ConfigurationReloadedHandler(object sender, LoggingConfigurationReloadedEventArgs args) { 
 System.Diagnostics.Trace.WriteLine("Configuration was reloaded");
}

[Test]
public void WillCallReloadHandler() {
   System.Diagnostics.Trace.WriteLine("Loading Config");
   LogManager.LoadConfiguration("nlog.config");
   LogManager.LogFactory.ConfigurationReloaded += ConfigurationReloadedHandler;
   LogManager.Configuration = LogManager.Configuration.Reload();
   LogManager.ReconfigExistingLoggers();
}

Ожидаемый результат - 2 сообщения в моем окне вывода, одно из которых говорит о перезагрузке конфигурации. Фактический результат - 1 сообщение о загрузке конфигурации.

1 Ответ

1 голос
/ 02 ноября 2019

ConfigurationReloaded вызывается NLog только при обнаружении того, что базовый nlog.config был изменен.

Вместо этого вы можете сделать это:

LogManager.ConfigurationChanged += LogManager_ConfigurationChanged;

private static void LogManager_ConfigurationChanged(object sender, LoggingConfigurationChangedEventArgs e)
{
    System.Diagnostics.Trace.WriteLine("Configuration was changed");
}
...