我正在尝试将表达式跟踪到Log4j。
假设对这个表达式的评估是昂贵的,并且不会产生任何副作用,那么Java是否足够智能以防止WARN模式下表达式计算的开销?
答案 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");