最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】C#中给NLog的多个Target设置不同的Level

C# crifan 6106浏览 0评论

【背景】

C#中,之前已经实现了用NLog实现log系统。

支持多个输出:文件 和RichTextBox

【已解决】C#中实现Log同时输出内容到文件和文本框(或终端)

 

注:

此处共有这些不同的level:

1
2
3
4
5
6
gLogger.Trace("trace log message");
gLogger.Debug("debug log message");
gLogger.Info("info log message");
gLogger.Warn("warn log message");
gLogger.Error("error log message");
gLogger.Fatal("fatal log message");

想要实现:

file中,全部都输出;

RichTextBox中,只输出info之上的,即info,warn,error,fatal,不输出trace,debug;

 

【解决过程】

1.后来参考官网文档:

Configuration File

看到了对应的设置minlevel

所以,想到了,应该代码中也是可以去配置此参数,而实现相同效果的。

然后去试试:

结果发现RichTextBoxTarget和FileTarget中,都不存在minlevel

没法直接代码设置。

2.而对应的LoggingRule,有Levels,但是是只读的,没法这样设置:

1
2
LoggingRule ruleRichTextBox = new LoggingRule("*", LogLevel.Debug, rtbTarget);
ruleRichTextBox.Levels = LogLevel.Info;

3.然后才注意到,原来上述new LoggingRule时,就已经是添加了所需要的level。

原先是:

1
2
3
4
5
6
// Step 4. Define rules
LoggingRule ruleRichTextBox = new LoggingRule("*", LogLevel.Debug, rtbTarget);
logConfig.LoggingRules.Add(ruleRichTextBox);
 
LoggingRule ruleFile = new LoggingRule("*", LogLevel.Debug, fileTarget);
logConfig.LoggingRules.Add(ruleFile);

所以改为:

1
2
3
4
5
LoggingRule ruleRichTextBox = new LoggingRule("*", LogLevel.Info, rtbTarget);
logConfig.LoggingRules.Add(ruleRichTextBox);
 
LoggingRule ruleFile = new LoggingRule("*", LogLevel.Trace, fileTarget);
logConfig.LoggingRules.Add(ruleFile);

即可。

对于:

1
2
3
4
5
6
7
gLogger = LogManager.GetLogger("");
gLogger.Trace("trace log message");
gLogger.Debug("debug log message");
gLogger.Info("info log message");
gLogger.Warn("warn log message");
gLogger.Error("error log message");
gLogger.Fatal("fatal log message");

然后就可以得到希望的结果:

文件File输出所有的:

2013-06-11 14:52:09  trace log message

2013-06-11 14:52:09  debug log message

2013-06-11 14:52:09  info log message

2013-06-11 14:52:09  warn log message

2013-06-11 14:52:09  error log message

2013-06-11 14:52:09  fatal log message

RichTextBox中输出Info及以上的:

2013-06-11 14:52:09  info log message

2013-06-11 14:52:09  warn log message

2013-06-11 14:52:09  error log message

2013-06-11 14:52:09  fatal log message

 

【总结】

对于NLog中,代码控制Target的不同Level的话,是通过在new LoggingRule时,指定对应的level的,不同LogLevel.Info,LogLevel.Trace。

以此实现不同的效果。

转载请注明:在路上 » 【已解决】C#中给NLog的多个Target设置不同的Level

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.477 seconds, using 22.16MB memory