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

问题描述 投票:0回答:1

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

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

而其他时候,我们连接:

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

这两者有什么区别?

logging slf4j
1个回答
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) + ".");
© www.soinside.com 2019 - 2024. All rights reserved.