我正在尝试将表达式跟踪到 Log4j。
假设这个表达式的计算是昂贵的,并且不会产生任何副作用,那么 Java 是否足够聪明以防止在 WARN 模式下表达式计算的开销?
我正在尝试将表达式跟踪到 Log4j。
假设这个表达式的计算是昂贵的,并且不会产生任何副作用,那么 Java 是否足够聪明以防止在 WARN 模式下表达式计算的开销?
不,这正是您if(logger.isXXXEnabled())
在代码库中散布大量检查的原因。我建议你转向 slf4j 以避免这种评估(只要你正确使用它,即参数化日志记录)。
我不太确定,你的意思。如果理解正确,您的意思是,答案是:否
log.trace("this log" + something() + " is expensive");
如果您不希望计算此日志语句,则需要包装代码:
if(log.isTraceEnabled()) log.trace("this log" + something() + " is expensive");