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