Добавить, включить и отключить регистраторы NLog программно - PullRequest
19 голосов
/ 19 сентября 2011

Как я могу добавлять, редактировать, удалять, включать и отключать регистраторы из кода для NLog?

Ответы [ 2 ]

29 голосов
/ 19 сентября 2011

Добавить:

var logTarget = new ...
logTarget.Layout = "Your layout format here";
// e.g. "${logger}: ${message} ${exception:format=tostring}";

// specify what gets logged to the above target
var loggingRule = new LoggingRule("*", LogLevel.Debug, logTarget);

// add target and rule to configuration
LogManager.Configuration.AddTarget("targetName", logTarget);
LogManager.Configuration.LoggingRules.Add(loggingRule);
LogManager.Configuration.Reload();

Удаление выполняется с помощью

LogManager.Configuration.LoggingRules.Remove(loggingRule);
LogManager.Configuration.Reload();
7 голосов
/ 15 мая 2017

Я знаю, что это старый ответ, но я хотел бы дать отзыв всем, кто хочет вносить изменения в свои цели и регистрировать правила программно, что Configuration.Reload () не работает.

Обновлять существующие цели программновам нужно использовать метод ReconfigExistingLoggers:

var target = (FileTarget)LogManager.Configuration.FindTargetByName("logfile");
target.FileName = "${logDirectory}/file2.txt";
LogManager.ReconfigExistingLoggers();

Пример, который добавляет и удаляет правила ведения журнала на лету:

if (VerboseLogging && !LogManager.Configuration.LoggingRules.Contains(VerboseLoggingRule))
{
    LogManager.Configuration.LoggingRules.Add(VerboseLoggingRule);
    LogManager.ReconfigExistingLoggers();
}
else if (!VerboseLogging && LogManager.Configuration.LoggingRules.Contains(VerboseLoggingRule))
{
    LogManager.Configuration.LoggingRules.Remove(VerboseLoggingRule);
    LogManager.ReconfigExistingLoggers();
}

Как написано в документах:

Перебирает все регистраторы, ранее возвращенные GetLogger.и пересчитывает их цель и список фильтров.Полезно после программного изменения конфигурации, чтобы убедиться, что все регистраторы были правильно сконфигурированы.

Этот ответ и пример взят из ответа Тони в:

Обновление целевого имени файла NLog во время выполнения

...