Добавить, включить и отключить программные журналы NLog

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

Ответы

Ответ 1

Чтобы добавить:

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();

Ответ 2

Я знаю, что это старый ответ, но я хотел дать отзыв для тех, кто хочет внести изменения в свои цели и правила протоколирования программно, что 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 во время выполнения