【背景】
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.后来参考官网文档:
看到了对应的设置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 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 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