赞
踩
作为程序员,程序开发写代码一定少不了记录日志(没日志的代码都是耍流氓!)今天记录一下自己新搭建spring-boot项目后对日志的思考。
起因:项目是一个无页面,通过直接访问数据库,然后调用第三方api实现数据上传的简单应用。因为项目很小,所以在项目完成后,为了使jar包的大小更小(强迫症,想把无用的maven引用全部去掉),所以打包完成后对lib下的jar包进行查看,发现关于log的jar包很多,由此引发联想,难道一个简单的日志都要用这么多的jar包吗?
查看自己的代码,发现只用到了如下代码
先说结论
commons-logging和slf4j是java中的日志门面,即它们提供了一套通用的接口,具体的实现可以由开发者自由选择。log4j和logback则是具体的日志实现方案。这是典型的门面模式
比较常用的搭配是commons-logging+log4j,slf4j+logback
spring默认使用commons-logging+log4j
spring-boot默认使用slf4j+logback
SLF4J是编译时绑定到具体的日志框架,性能优于采用运行时搜寻的方式的commons-logging
不需要使用logger.isDebugEnabled()来解决日志因为字符拼接产生的性能问题
- logger.info("my name is {}", "medusar");
- logger.info("my name is " + "medusar");
在效率上,第一行比第二行更高,因为如果当前日志级别是ERROR,第一行不会进行字符串拼接,而第二行,无论日志级别是什么,都会先进行字符串拼接。
所以为了解决这个问题,commons-logging等框架提供了下面的方式:
- if (log.isDebugEnabled()){
- log.debug("dddd"+"eee");
- }
所以说,现在使用spring-boot开发,已经不需要再使用log.isDebugEnabled()来判断debug了
下面我们顺藤摸瓜开始今天的寻根之旅!
先看下slf4j的实现
配合第一张图,可知:
可单独只使用slf4j
logback就是默认slf4j的实现(logback-classic.jar,logback-core.jar&#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。