Как заставить перезагрузить файл конфигурации NLog?
Я использую NLog с файлами конфигурации. Чтобы не записывать слишком много информации для длительных процедур, я делаю такие вещи:
foreach (LoggingRule rule in LogManager.Configuration.LoggingRules)
{
rule.DisableLoggingForLevel(LogLevel.Trace);
rule.DisableLoggingForLevel(LogLevel.Debug);
}
LogManager.ReconfigExistingLoggers();
Это позволяет мне временно снизить уровень детализации журналов. Вышеуказанные строки являются лишь примером для иллюстрации. Кажется, это работает отлично.
После этого я хотел бы восстановить свою «обычную» конфигурацию регистрации, простоперезагрузка моего файла NLog.Config который уже был автоматически загружен при запуске программы. Я пробовал :
LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();
Я думал, что это будет легко, но конфигурация. Перезагрузка не делает то, что я ожидал, и я не нашел другого подходящего метода. После звонка мой регистратор по-прежнему не сохраняет следы и события отладки, пока они находились при запуске программы.
Итак, мой вопрос: как программно форсировать перезагрузку NLog.config во время выполнения и восстановить мои «стандартные» настройки логгеров?
Спасибо
Обновление вопроса с более подробной информацией:
Я использую VS2013, .Net 4 projet с NLog 4.4.0-beta11 (бета-версия, но последняя на nuget), простая цель «Файл», определенная в файле конфигурации с minLevel = Trace и autoReload = True
Создание журнала на уровне класса: частное статическое чтение только для Logger Logger = LogManager.GetCurrentClassLogger ();
Вот мое тестовое свидетельство:
Assert.True(Logger.IsTraceEnabled);
Assert.True(Logger.IsDebugEnabled);
Logger.Trace("1 - This should appear in log");
Logger.Debug("2 - This should appear in log");
foreach (LoggingRule rule in LogManager.Configuration.LoggingRules)
{
rule.DisableLoggingForLevel(LogLevel.Trace);
rule.DisableLoggingForLevel(LogLevel.Debug);
}
LogManager.ReconfigExistingLoggers();
Logger.Trace("3 - This should NOT appear in log");
Logger.Debug("4 - This should NOT appear in log");
Logger.Info("5 - This should appear in log");
Assert.False(Logger.IsDebugEnabled);
Assert.False(Logger.IsTraceEnabled);
LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();
// This is were something goes wrong
Logger.Trace("6 - This should appear in log"); // DOES NOTHING
Logger.Debug("7 - This should appear in log"); // DOES NOTHING
Logger.Info("8 - This should appear in log");
Assert.True(Logger.IsDebugEnabled); // FAILS
Assert.True(Logger.IsTraceEnabled); // FAILS
Сгенерированный журнал:
TRACE 1 - This should appear in log
DEBUG 2 - This should appear in log
INFO 5 - This should appear in log
INFO 8 - This should appear in log
Во внутреннем журнале nlog я вижу, что конфигурация, кажется, была перезагружена без проблем (очень длинный файл, поэтому я не размещаю его здесь, если кто-то не спрашивает), но, возможно, существующие регистраторы не обновляются?
С кодом выше это должно быть легко попробовать на вашей стороне. Пожалуйста, дайте мне знать, если я что-то не так делаю или это ошибка в управлении конфигурацией NLog.