Logging 使用{}而不是串联打印日志语句
我们使用slf4j进行日志记录。我看到有时日志语句如下所示:Logging 使用{}而不是串联打印日志语句,logging,slf4j,Logging,Slf4j,我们使用slf4j进行日志记录。我看到有时日志语句如下所示: log.info("Something like this {}", variable); 鉴于,在其他情况下,我们将: log.info("Something like this " + variable); 这两者之间有什么区别?在第一种情况下 log.info("Something like this {}", variable); 第一个info参数是一个模板字符串。在内部,log4j将使用其余的参数以相应的顺序填充占位
log.info("Something like this {}", variable);
鉴于,在其他情况下,我们将:
log.info("Something like this " + variable);
这两者之间有什么区别?在第一种情况下
log.info("Something like this {}", variable);
第一个info参数是一个模板字符串。在内部,log4j将使用其余的参数以相应的顺序填充占位符
在第二种情况下
log.info("Something like this " + variable);
StringBuilder将用于组装消息字符串,结果将用作日志消息
使用第一种变体至少有两个原因:
1除非要将消息写入appender,否则不会处理该消息
使用模板字符串会延迟消息处理,只有在实际写入日志时才会进行渲染
在第二种情况下,即使日志级别不足以打印日志,消息也会被组装起来
2提高可读性
为了感受差异,你应该考虑一个更复杂的例子:
log.info("A is {} and B is {}. The difference is {}.", a, b, a-b);
vs
log.info("A is " + a + " and B is " + b + ". The difference is " + (a-b) + ".");