我在应用程序中使用Log4J进行日志(log)记录.之前我使用的调试调用如下:
Option 1:
logger.debug("some debug text");
但一些链接建议最好先判断isDebugEnabled()
,比如:
Option 2:
boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
logger.debug("some debug text");
}
所以我的问题是"Does option 2 improve performance any way?".
因为在任何情况下,Log4J框架对debugEnabled都有相同的判断.对于选项2,如果我们在单个方法或类中使用多个调试语句,框架不需要多次调用isDebugEnabled()
个方法(每次调用);在这种情况下,它只调用isDebugEnabled()
方法一次,如果Log4J被配置为调试级别,那么实际上它调用isDebugEnabled()
方法两次:
- 如果为debugEnabled变量赋值,以及
- 实际上是由记录器调用的.debug()方法.
我不认为如果我们在方法或类中编写多个logger.debug()
语句,并根据选项1调用debug()
方法,那么与选项2相比,Log4J框架的开销会很大.因为isDebugEnabled()
是一个非常小的方法(就代码而言),所以它可能是内联的很好的候选者.