1、获取SLF4J源码
从github拉取项目,版本是1,7.28,地址https://github.com/qos-ch/slf4j/releases/tag/v_1.7.28
将项目导入IDEA

2、建立自己的测试模块
在demo模块里面创建一个Demo.java来测试运行一下
pom.xml文件

Demo.java文件

运行Demo.java结果

提示:控制台提示找到两个StaticLoggerBinder.java实现类,除了slf4j-simple模块实现了以外,slf4j-api为了能正确打包也有一个StaticLoggerBinder.java类,却没有实现任何接口的。
3、开始跟进SLF4J代码
先从我们的Demo.java中的getLogger(Demo.class)方法的代码,就变成了下图这样,我们再进入getLogger(clazz.getName)代码

4、LoggerFactory初始化
进入了getLogger(clazz.getName)代码后进来到了getILoggerFactory() 这里为了避免多线程出现问题,使用了双重校验。

进入performInitialization()代码

5、核心方法bind()
bind() 方法是最核心代码,这里会调用方法获取所有符合 org.slf4j.implStaticLoggerBinder.class 路径的保存在一个集合里面 并且根据集合会警告是否存在多个日志框架,并会提示具体使用的是哪个日志框架。

可以进入findPossibleStaticLoggerBinderPathSet()看看,该 方法会找到classpath下的所有符合这个路径的class文件。
