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