Java 检查Log4J中是否有要调试的记录器

Java 检查Log4J中是否有要调试的记录器,java,logging,log4j,Java,Logging,Log4j,我的代码被调用了很多次,甚至调用logger.isDebugEnabled的代价都太高了。 我可以将isDebugEnabled值存储到类上的静态变量中,但随后我失去了在服务器运行期间启用调试的选项。 今天,我对Log4J的所有调用都是通过定制包装器完成的。 我想实现一个解决方案,如果没有记录器设置为调试,我将能够通过检查一些全局布尔变量尽快返回,并且只有当一个或多个记录器设置为调试时,包装器才会将调用转发到Log4J 如果有一个或多个记录器设置为调试,是否有方法询问Log4J配置? 这样,我可

我的代码被调用了很多次,甚至调用logger.isDebugEnabled的代价都太高了。 我可以将isDebugEnabled值存储到类上的静态变量中,但随后我失去了在服务器运行期间启用调试的选项。 今天,我对Log4J的所有调用都是通过定制包装器完成的。 我想实现一个解决方案,如果没有记录器设置为调试,我将能够通过检查一些全局布尔变量尽快返回,并且只有当一个或多个记录器设置为调试时,包装器才会将调用转发到Log4J

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

如果您在Log4j中遇到性能问题,我建议您查看一下

如果需要坚持使用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.getLevel是否会返回true@没有。我刚刚用Logj4 1.2.17测试了它。如果您正在仔细查看日志,只需在循环开始时检查isDebugEnabled。
LogManager.getRootLogger().setLevel(Level.DEBUG);