Есть ли способ программно настроить фильтры целевых правил в NLog 4.6?

#c# #nlog

#c# #nlog

Вопрос:

Я пытаюсь преобразовать все мои конфигурации NLog в класс C #, который можно использовать как часть «общей» библиотеки моей компании, но мне нужно иметь возможность поддерживать фильтрацию регистратора. Я специально пытаюсь реализовать пороговые значения для игнорирования повторяющихся сообщений (например, DDOS). Я смог перенести все свои настройки из файла NLog.config, за исключением этих настроек фильтрации.

Ниже приведен пример кода из NLog о том, как настроить фильтрацию в файле .config, но я не смог найти никакого способа воспроизвести это в доступных методах класса.

 <logger name="*" writeTo="file">
  <filters defaultAction='Log'>
    <when condition="length('${message}') > 100" action="Ignore" />
  </filters>
</logger> 
  

Ответ №1:

Существует Filter коллекция под LoggingRule .

Вы могли бы перевести на это:

 var config = LogManager.Configuration;

// some target
var fileTarget = new FileTarget();

// set-up rule with filter
var loggingRule = new LoggingRule("*", fileTarget);
loggingRule.DefaultFilterResult = FilterResult.Log;
loggingRule.Filters.Add(new ConditionBasedFilter()
{
    Condition = "length('${message}') > 100",
    Action = FilterResult.Ignore
});

config.LoggingRules.Add(loggingRule);

// apply config
LogManager.Configuration = config;
  

Комментарии:

1. Также добавлено здесь: github.com/NLog/NLog/wiki/Filtering-log-messages