有没有办法在 NLog 4.6 中以编程方式配置目标规则过滤器?

Is there a way to programmatically configure target rules filters in NLog 4.6?

我正在尝试将我所有的 NLog 配置包装到一个 C# class 中,它可以用作我公司 "common" 库的一部分,但我需要能够支持记录器过滤.我专门尝试实施阈值以忽略重复的消息(想想 DDOS)。除了这些过滤设置外,我已经能够从 NLog.config 文件移植我的所有设置。

下面是 NLog 中关于如何在 .config 文件中配置过滤的示例代码,但我无法在公开的 class 方法中找到任何方法来复制它。

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

LoggingRule下有Filter个合集。

你可以翻译成这样:

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;