Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 使用{}而不是串联打印日志语句_Logging_Slf4j - Fatal编程技术网

Logging 使用{}而不是串联打印日志语句

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将使用其余的参数以相应的顺序填充占位

我们使用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);
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) + ".");