关于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比log4j更优秀的一点是可以使用占位符

注意:一个{},对应一个变量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值