当前位置:   article > 正文

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

log.isdebugenabled()

原文掘金地址 

作为程序员,程序开发写代码一定少不了记录日志(没日志的代码都是耍流氓!)今天记录一下自己新搭建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");
      2. logger.info("my name is " + "medusar");

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

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

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

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

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

先看下slf4j的实现

 配合第一张图,可知:

  1. 可单独只使用slf4j
    
  2. logback就是默认slf4j的实现(logback-classic.jar,logback-core.jar&#
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/163336
推荐阅读
相关标签
  

闽ICP备14008679号