logging器slf4j格式化的优点是{}而不是string连接

有没有使用{}而不是string连接的优势?

来自slf4j的一个例子

 logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT); 

代替

 logger.debug("Temperature set to"+ t + ". Old temperature was " + oldT); 

我认为这是关于速度优化,因为参数评估(和string连接)可以在运行时避免取决于configuration文件。 但是只有两个参数是可能的,有时除了string连接之外没有别的select。 对这个问题需要看法。

关于string连接的performance。 如果您有密集的日志logging,这可能很有意义。

(在SLF4J 1.7之前)但是只有两个参数是可能的

由于绝大多数日志logging语句具有2个或更less的参数,所以至1.6版本的SLF4J API仅涵盖大部分用例。 API版本1.7以来,APIdevise人员提供了带有可变参数的重载方法。

对于那些需要超过2个的情况,你被1.7之前的SLF4J所困,那么就使用string连接或new Object[] { param1, param2, param3, ... } 。 应该有足够的几个,performance并不重要。

简短版本:是的,速度更快,代码更less!

string连接在不知道是否需要的情况下执行了很多工作(传统的“已启用debugging”testing),应尽可能避免,因为{}允许延迟toString()调用和string构造以确定事件是否需要捕捉。 通过使logging器格式为单个string,我认为代码变得更清洁。

您可以提供任意数量的参数。 请注意,如果您使用的是旧版本的sljf4j,并且{}有两个以上的参数,则必须使用new Object[]{a,b,c,d}语法来传递数组。 参见例如http://slf4j.org/apidocs/org/slf4j/Logger.html#debug(java.lang.String,java.lang.Object []) 。

关于速度:Ceki公布了其中一个名单的基准。

另一种select是String.format() 。 我们在jcabi-log ( slf4j的静态实用包装)中使用它。

 Logger.debug(this, "some variable = %s", value); 

它更易于维护和扩展。 此外,翻译很容易。