目录
1.日志门面和日志实现
JCL是commons-logging包下的
JUL是jdk自带,在java.util.logging包下
Log4j是Apache下的一款开源的日志框架
Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好
Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计
Log4j2主要有以下特色
性能提升:Log4j 2包含基于LMAX Disruptor库的下一代异步记录器。在多线程方案中,与Log4j 1.x和Logback相比,异步Logger的吞吐量高18倍,延迟降低了几个数量级
自动重载配置:与Logback一样,Log4j 2可以在修改后自动重新加载其配置。与Logback不同,它在进行重新配置时不会丢失日志事件
无垃圾机制:在稳态日志记录期间,Log4j 2 在独立应用程序中是无垃圾的,而在Web应用程序中是低垃圾的。这样可以减少垃圾收集器上的压力,并可以提供更好的响应时间性能
2.SpringBoot默认日志框架
由下图可知SpringBoot默认使用Slf4j+Logback的方式;
3.形形色色的日志框架SpringBoot如何整合的
下面我们来想一个问题:假如其他框架不是使用的Slf4j门面,那么是SpringBoot是如何统一使用Slf4j进行输出的呢?
下面我们来看Slf4j官方的一张历史遗留问题的图片,网址为http://www.slf4j.org/legacy.html
可以明显看出,我们可以使用替换包对框架自带的日志门面进行替换,替换的原则清继续往下看
下
替换的原则
1、将系统中其他日志框架先排除出去;
2、用中间包来替换原有的日志框架;
3、导入slf4j其他的实现
4.更换SpringBoot默认的日志框架
比如将SpringBoot的日志实现切换为log4j2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
5.注意事项
阿里巴巴编码规范中建议使用Slf4j的api
后续还会继续补充日志配置文件等相关知识,请持续关注,感觉观看~