是否可以在NLog 4.6中以编程方式配置目标规则过滤器?

时间:2019-03-27 17:04:56

标签: 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 个答案:

答案 0 :(得分:0)

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;