Java编译器可以避免Log4j参数的参数表达式求值

时间:2013-01-22 19:09:21

标签: java optimization log4j

我正在尝试将表达式跟踪到Log4j。

假设对这个表达式的评估是昂贵的,并且不会产生任何副作用,那么Java是否足够智能以防止WARN模式下表达式计算的开销?

2 个答案:

答案 0 :(得分:3)

没有。这正是您在代码库中分散了大量if(logger.isXXXEnabled())个检查的原因。我建议你转到slf4j,这样可以避免这种评估(前提是你正确使用它,parameterized logging)。

答案 1 :(得分:1)

我不太确定,你是什么意思。如果理解,你的意思是,答案是:否

log.trace("this log" + something() + " is expensive");

如果您不希望计算此日志语句,则需要对代码进行包装:

if(log.isTraceEnabled()) log.trace("this log" + something() + " is expensive");