关于Slf4j中占位符{}
Posted Firm陈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Slf4j中占位符{}相关的知识,希望对你有一定的参考价值。
日志输出中{}很好用(具体可参看:https://blog.csdn.net/Dongguabai/article/details/83719754)
{}的确使用很方便,但是大多数博客文章说使用{}会性能更好,到底怎么样可以从源码中看看(其实可以大致猜测一下,哪怕代码玩出花来,也要找到每个{}的位置进行替换吧)。
测试代码:
org.slf4j.helpers.MessageFormatter#arrayFormat(java.lang.String, java.lang.Object[], java.lang.Throwable):
本质也需要获取每个参数,找到位置通过StringBuilder拼接。所以不能说使用了{}效率更高,但是一般参数不会很多,数组遍历速度也是很快的,总体效率差是可以忽略的。
package test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* @author Dongguabai
* @date 2018/11/4 20:41
*/
public class TestLog {
private static final Logger logger = LoggerFactory.getLogger(TestLog.class);
public static void main(String[] args) {
List<Long> sum = new ArrayList<Long>(10);
for (int i2 = 0; i2 < 10; i2++) {
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
test1();//用时:[4268, 4151, 4207, 4124, 4163, 4116, 4099, 4198, 4173, 4076]
//test2();//用时:[4422, 4067, 4086, 4067, 4068, 4113, 4082, 4075, 4058, 4145]
}
long end = System.currentTimeMillis();
sum.add(end - start);
}
System.out.println("用时:" + sum);
}
public static void test1() {
logger.error("aaa{}ccc{}eee{}ggg{}iii{}kkk{}lll", "bbb", "ddd", "fff", "hhh", "jjj", "mmm");
}
public static void test2() {
logger.error(new StringBuilder("aaa").append("bbb").append("ccc").append("ddd").append("eee").append("fff").append("ggg").append("hhh").append("iii").append("jjj").append("kkk").append("mmm").append("lll").toString());
}
}
注意:一个{},对应一个变量。
以上是关于关于Slf4j中占位符{}的主要内容,如果未能解决你的问题,请参考以下文章