log.info(“ dsasdds {}”,var)和log.info(“ dsasdds” + var)之间的区别?

时间:2019-06-13 19:48:09

标签: java logging log4j2

以前我通常曾经使用log.info(“dsasdds ” + var)添加日志,但是现在,在我的新工作场所中,我看到每个人都使用log.info(“dsasdds {}”, var)方式打印日志吗?这两种方式在内部工作方式之间是否有显着差异?

1 个答案:

答案 0 :(得分:2)

这取决于日志中打印的变量的计算。
假设var.toString()相对昂贵,并且当前记录器未启用info级别,通过使用log.info(“dsasdds ” + var),由于没有写入任何日志,因此“无”而计算出了相对昂贵的操作。
使用log.info(“dsasdds {}”, var),仅当当前记录器的级别与请求的级别(此处为var.toString())相匹配时,才会调用INFO
对于表达式,suppliers (that are lazily evaluated) is also a possibility

logger.trace("Some long-running operation returned {}", () -> expensiveOperation());

现在使用系统懒惰的评估表达式/变量是一种好习惯? 不一定,但这在您的示例的可读性方面也没有损害。