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

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

C# crifan 6012浏览 0评论

【背景】

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

支持多个输出:文件 和RichTextBox

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

 

注:

此处共有这些不同的level:

            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,但是是只读的,没法这样设置:

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

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

原先是:

            // 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);

所以改为:

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

即可。

对于:

            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.184 seconds, using 22.11MB memory