2012-09-05 36 views
0

是否可以确定appender是否被禁用(即<level value="Off">)?如何检查appender是否被禁用/启用

我想有决定如果我的附加目的地启用全局标志:

public static bool isAppenderEnabled = /*...*/; 

如果附加器被启用,那么我会记录的东西:

if(isAppenderEnabled) 
{ 
    MyAppender.Warn("****************************************"); 
    MyAppender.Warn("Warning title!"); 
    MyAppender.Warn(String.Format("Some warning message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
    MyAppender.Warn("****************************************"); 
} 

重要的是要具有isAppenderEnabled标志,因为当appender被禁用时,由于我没有构造所有这些字符串,因此我将节省大量的CPU时间。检查appender是否关闭的最佳/最简单的方法是什么?

P.S. 我试过MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Off);,但是,如果我将日志级别设置为Warn,它总是为Off返回true(基本上,它总是说记录器被禁用),所以这是行不通的。

+0

[可其对你有用的,因为这是你检查的simmilar问题的答案] [1] [1]:http://stackoverflow.com/a/10126517/1003016 –

回答

1

做的是推荐的方式,是不是有一个全球性的标志,以表示日志是否启用,而是测试的,按每个呼叫, 如

实际的日志记录级别
if (MyAppender.IsWarnEnabled) 
{ 
    MyAppender.Warn(String.Format("Some warning message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
} 

...

if (MyAppender.IsDebugEnabled) 
{ 
    MyAppender.Debug(String.Format("Some debug info! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
} 

...

if (MyAppender.IsErrorsEnabled) 
{ 
    MyAppender.Error(String.Format("Some error message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
} 

这种方法的优点是,您可以设置并保持日志记录为Level.Error或Level.Fatal,而无需在warn/debug和info消息中构建所有字符串。

话虽如此,它是您的选择。若要回答您的问题,MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Off); 不起作用的原因是,如果级别设置为x 或更高,则MyAppender.Logger.IsEnabledFor(x)将返回true。因此,我希望这个调用总是返回true。

下一级是(据我所知)log4net.Core.Level.Emergency这样可以检查是否存在,而是作为水平不常用的,你也可以检查log4net.Core.Level.Fatal

MyAppender.IsFatalEnabled只是为MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Fatal)一个属性包装,

0

根据我的log4j的理解这log4net的是基于,您可以检查记录器的配置,你有兴趣在通过调用级别:

logger.isEnabledFor(Priority.WARN) // or whatever log priority you want 

没有任何告知用户,如果appender已启用。但是,您可以检查是否给定的指定appender分配给您的记录器。你会检查:

if(logger.getAppender("MyAppender") == null) 
+0

我试过' IsEnabledFor',但这是限制并且在我们处理多个日志级别时不是非常健壮。 – Kiril