本篇意为说明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的日志对象。