Her*_*che 86 optimization logging concatenation string-formatting slf4j
使用{}而不是字符串连接有什么好处吗?
来自slf4j的一个例子
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
Run Code Online (Sandbox Code Playgroud)
代替
logger.debug("Temperature set to"+ t + ". Old temperature was " + oldT);
Run Code Online (Sandbox Code Playgroud)
我认为这是关于速度优化的,因为根据配置文件,可以在运行时避免参数评估(和字符串连接).但是只有两个参数是可能的,那么有时除了字符串连接之外别无选择.需要就此问题提出意见.
ska*_*man 66
它是关于字符串连接性能的.如果您拥有密集的日志记录语句,那么这可能很重要.
(在SLF4J 1.7之前)但是只有两个参数是可能的
由于绝大多数日志记录语句都有2个或更少的参数,因此最高版本1.6的SLF4J API涵盖(仅)大多数用例.自API版本1.7以来,API设计者已经为重载方法提供了varargs参数.
对于那些你需要超过2并且你仍然坚持使用1.7之前的SLF4J的情况,那么只需使用字符串连接或new Object[] { param1, param2, param3, ... }.它们应该足够少,表现不那么重要.
Tho*_*sen 39
简短版本:是的,速度更快,代码更少!
字符串连接在不知道是否需要的情况下做了很多工作(传统的"已启用调试"测试从log4j中得知),如果可能的话应该避免,因为{}允许延迟toString()调用和字符串构造在确定事件是否需要捕获之后.通过使记录器格式为单个字符串,我认为代码变得更清晰.
您可以提供任意数量的参数.请注意,如果您使用旧版本的sljf4j并且您有两个以上的参数{},则必须使用该new Object[]{a,b,c,d}语法来传递数组.参见例如http://slf4j.org/apidocs/org/slf4j/Logger.html#debug(java.lang.String,java.lang.Object []).
关于速度:Ceki在其中一个名单上发布了一段基准.
小智 6
因为,String 在Java中是不可变的,所以左右String必须被复制到每个串联的新String中.所以,最好选择占位符.
| 归档时间: |
|
| 查看次数: |
82759 次 |
| 最近记录: |