在条件下以编程方式实现最大级别
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)"
我有
<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)"