苦行僧DH

博客园 首页 新随笔 联系 订阅 管理

本篇意为说明Spring默认日志实现与SpringBoot默认日志实现。

1、日志

在这之前,我们应该先了解一些日志框架。

具体可以看我这篇随笔:https://www.cnblogs.com/daihang2366/p/15201347.html

你得了解JCL、SLF4J、JUL、LogBack。

2、Spring5.x

在Spring5.x中,默认日志实现为JCL+JUL(其他版本未验证)。

证明

打开Spring源码,随便找一个类中获取日志Log的属性。

进入其getLog方法中:

在进入下一层方法中:

进入JavaUtilDelegate.createLog方法中后就能发现其是使用的JUL。

那么Spring是如何根据我们的依赖项来切换日志实现的呢?

注意看,在LogFactory的静态代码块当中,尝试了初始化log4j、slf4j,如果有这些类,就设置其指定的值到logApi中,供getLog中switch方法使用,那么既然都使用slf4j桥接器了,那具体能使用哪种日志实现就很容易扩展了。

3、SpringBoot

在SpringBoot2.5.7中,默认日志实现为SLF4J+LogBack(其他版本未验证)。

进入LogFactory.getLog方法中查看:

再进入LogAdapter.createLog方法当中:

此时注意logApi的值为SLF4J_LAL,在spring5.x中logApi是没有值的,直接走进了default中,而default中则是使用JUL,这里可以看一个Slf4jAdapter.createLocationAwareLog方法中返回的是logBack。

可以看到,Log对象那个是Slf4J桥接器,实际其使用的log为logback的日志对象。

posted on 2021-12-23 17:44  苦行僧DH  阅读(174)  评论(0编辑  收藏  举报