【发布时间】:2010-11-01 02:23:37
【问题描述】:
我在我的应用程序中使用 Log4J 进行日志记录。以前我使用调试调用,如:
选项 1:
logger.debug("some debug text");
但有些链接建议最好先检查isDebugEnabled(),例如:
选项 2:
boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
logger.debug("some debug text");
}
所以我的问题是“选项 2 会以任何方式提高性能吗?”。
因为无论如何 Log4J 框架对 debugEnabled 都有相同的检查。对于选项 2,如果我们在单个方法或类中使用多个调试语句可能是有益的,其中框架不需要多次调用 isDebugEnabled() 方法(每次调用);在这种情况下,它只调用了一次isDebugEnabled() 方法,如果 Log4J 配置为调试级别,那么实际上它调用了两次isDebugEnabled() 方法:
- 如果为 debugEnabled 变量赋值,并且
- 实际上是由logger.debug()方法调用的。
我不认为如果我们在方法或类中编写多个 logger.debug() 语句并根据选项 1 调用 debug() 方法,那么与选项 2 相比,Log4J 框架是开销。因为 isDebugEnabled() 是非常小的方法(就代码而言),它可能是内联的好候选。
【问题讨论】: