还在用log.isDebugEnabled()判断debug日志?你out了

原文掘金地址 

作为程序员,程序开发写代码一定少不了记录日志(没日志的代码都是耍流氓!)今天记录一下自己新搭建spring-boot项目后对日志的思考。

  起因:项目是一个无页面,通过直接访问数据库,然后调用第三方api实现数据上传的简单应用。因为项目很小,所以在项目完成后,为了使jar包的大小更小(强迫症,想把无用的maven引用全部去掉),所以打包完成后对lib下的jar包进行查看,发现关于log的jar包很多,由此引发联想,难道一个简单的日志都要用这么多的jar包吗?

 查看自己的代码,发现只用到了如下代码

 先说结论

  1. commons-logging和slf4j是java中的日志门面,即它们提供了一套通用的接口,具体的实现可以由开发者自由选择。log4j和logback则是具体的日志实现方案。这是典型的门面模式

  2. 比较常用的搭配是commons-logging+log4j,slf4j+logback

    spring默认使用commons-logging+log4j

    spring-boot默认使用slf4j+logback

  3. SLF4J是编译时绑定到具体的日志框架,性能优于采用运行时搜寻的方式的commons-logging

  4. 不需要使用logger.isDebugEnabled()来解决日志因为字符拼接产生的性能问题

    1. logger.info("my name is {}", "medusar");
      logger.info("my name is " + "medusar");
      

      在效率上,第一行比第二行更高,因为如果当前日志级别是ERROR,第一行不会进行字符串拼接,而第二行,无论日志级别是什么,都会先进行字符串拼接。

    2. 所以为了解决这个问题,commons-logging等框架提供了下面的方式:

      if (log.isDebugEnabled()){
              log.debug("dddd"+"eee");
          }
      

所以说,现在使用spring-boot开发,已经不需要再使用log.isDebugEnabled()来判断debug了

下面我们顺藤摸瓜开始今天的寻根之旅!

先看下slf4j的实现

 配合第一张图,可知:

  1. 可单独只使用slf4j
    
  2. logback就是默认slf4j的实现(logback-classic.jar,logback-core.jarÿ
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值