在条件下以编程方式实现最大级别

To implement the max level programmatically in condition

我有

   <logger name="*" minlevel="Trace" writeTo="f1" /> 

现在我添加了最大级别。所以

<logger name="*" minlevel="Trace" maxlevel="Error" writeTo="f1" />

我想以编程方式实现它。我尝试了什么

Then in code:

var filter = new ConditionBasedFilter();
filter.Action = FilterResult.Log;
filter.Condition = "(level <= LogLevel.Info)";
var loggerRule = new LoggingRule(ruleName, LogLevel.Debug, target);
loggerRule.Filters.Add(filter);
nLogLoggingConfiguration.LoggingRules.Add(loggerRule);

但是过滤器不起作用,因为结果与我不添加过滤器的结果相同。这意味着无论我是否注释掉 loggerRule.Filters.Add(filter); 行,我都会得到相同的结果。

编辑:

可能是NLOG的bug。当您设置 filter.Action = FilterResult.Log;var loggerRule = new LoggingRule(ruleName, LogLevel.Debug, target);.

条件无法应用到规则。

我们可以做到以下几点:

filter.Action = FilterResult.Ignore;
filter.Condition = "(level == LogLevel.Trace or level == LogLevel.Warn or level == LogLevel.Error or level == LogLevel.Fatal)"