以条件方式以编程方式实现最高级别

时间:2015-06-11 20:10:01

标签: .net logging nlog

我有

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

现在我添加了maxlevel。所以

<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的错误。设置filter.Action = FilterResult.Log;时 和var loggerRule = new LoggingRule(ruleName, LogLevel.Debug, target);

条件无法应用于规则。

1 个答案:

答案 0 :(得分:0)

我们可以做到以下几点:

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