【背景】
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