【问题标题】:How to check if an appender is disabled/enabled如何检查附加程序是否被禁用/启用
【发布时间】:2012-09-06 18:24:39
【问题描述】:

是否可以确定附加程序是否被禁用(即<level value="Off">)?

我想要一个全局标志来确定我的附加程序是否已启用:

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 标志很重要,因为由于我没有构建所有这些字符串,因此当禁用附加程序时我会节省大量 CPU 时间。检查附加程序是否关闭的最佳/最简单方法是什么?

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

【问题讨论】:

标签: c# logging log4net


【解决方案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,而无需在警告/调试和信息消息中构造所有字符串。

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

下一个级别是(AFAIK)log4net.Core.Level.Emergency,因此可以检查,但由于该级别不常用,您也可以检查 log4net.Core.Level.Fatal

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

【讨论】:

    【解决方案2】:

    根据我对log4net所基于的log4j的理解,你可以通过调用来检查LOGGER是否配置为你感兴趣的级别:

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

    没有任何东西可以告诉我们是否启用了附加程序。但是,您可以检查是否将给定的命名附加程序分配给您的记录器。你会检查:

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

    【讨论】:

    • 我已经尝试过IsEnabledFor,但是当我们处理多个日志级别时,这是有限的并且不是很健壮。
    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2011-09-20
    • 2014-05-16
    相关资源
    最近更新 更多