使用{}而不是连接来打印日志语句

时间:2018-01-01 21:04:44

标签: logging slf4j

我们使用slf4j进行日志记录。我看到有时日志语句提供为:

log.info("Something like this {}", variable);

然而,其他时候,我们连接:

log.info("Something like this " + variable);

这两者有什么区别?

1 个答案:

答案 0 :(得分:1)

在第一种情况下

log.info("Something like this {}", variable);

第一个info参数是模板字符串。在内部,log4j将使用其余参数以相应的顺序填充占位符。

在第二种情况下

log.info("Something like this " + variable);

StringBuilder将用于汇编消息字符串,结果将用作您的日志消息。

使用第一个变体至少有两个原因:

1)除非要将消息写入appender,否则不会处理该消息。

使用模板字符串延迟消息处理和渲染只有在实际写入日志时才会进行(javadoc ref)。

在第二种情况下,即使您的日志记录级别不足以打印日志,也会汇编消息。

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) + ".");