检查Log4J中是否有记录器设置为DEBUG

时间:2014-10-28 13:23:00

标签: java logging log4j

我有很多次调用的代码,即使调用logger.isDebugEnabled()也要花费太多。 我可以将isDebugEnabled()值存储到类的静态变量中,但随后我松开了在服务器运行期间启用调试的选项。
今天我对Log4J的所有调用都是由自定义包装器完成的 我想实现一个解决方案,如果没有设置记录器进行调试,我将能够通过检查一些全局布尔变量来返回ASAP,并且只有当一个或多个记录器设置为调试时,包装器才会将调用转发给Log4J。

如果有一个或多个记录器设置为调试,有没有办法询问Log4J配置? 这样我就可以每5秒检查一次,并打开/关闭一个全局布尔值,它将被我的包装器使用。

1 个答案:

答案 0 :(得分:0)

如果您遇到Log4j的性能问题,我建议您查看logback

如果您需要坚持使用log4j,您可以执行以下操作之一。 以下代码将检查根记录器的日志记录级别。这可能是你所需要的。

Level level = LogManager.getRootLogger().getLevel();
if(level == Level.DEBUG)
    System.out.println("DEBUG");

如果您确实想要检查每个记录器,可以执行此操作。

 for (Enumeration<Logger> en = LogManager.getCurrentLoggers(); en.hasMoreElements();)
   System.out.println(en.nextElement().isDebugEnabled());

为了完整性,您可以使用以下内容更改根日志记录级别。

LogManager.getRootLogger().setLevel(Level.DEBUG);