学习资料引用
为什么使用 SLF4J 而不是 Log4J 来做 Java 日志
SLF4J和Logback和Log4j和Logging的区别与联系
B站大佬视频
框架之间基础关系
在搜集的资料中,比较流行的java框架抽象层有如下几种
-
JUL(java.util.logging)
官方日志框架,spring底层默认框架
-
log4j(log for java)
开源框架
-
SLF4J(simple logging facade for java)
springboot底层日志默认框架
日志实现由如下几种
- log4j
- JUL
- -log4j2(Apache公司所写,没有合适的适配层)
- logback(SLF4J,log4j,logback出自一人之手,适配性是最好的)
框架实现
官方文档
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cXY1sGVkBXNywEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuMzMxMzN1ITM4IDOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
在log4j和JUL出来的时候,还并没有出现SLF4J,所以中间会有一层适配层,来帮助程序调用API
调用的始终是SLF4J的方法,不过是适配层来实现SLF4J抽象层,在实现过程中,调用了实现类的API
框架切换
首先还是官方的切换框架说明文档
官方的切换框架说明文档
其他框架底层例如是JUL,会有类似适配层的.jar(这里指的就是jcl-over-sef4j.jar),他们会把JUL接口转成SLF4J的
当需要把SLF4J的实现从logback转成log4j的时候,因为会引入适配层,所以不再需要把log4j的遗留接口转换成SLF4J接口
logback转log4j具体实现
logback各方面比log4j更为强大,这里只是单纯进行练习
首先看log方便的依赖
这里可以观察到依赖关系
首先应该将logback依赖排除掉
对于log4j-to-slf4 因为我们原本准备使用log4j 这里逻辑上应该将其移除,但是转为slf4也不会对结果产生影响
最后添加适配层的依赖,并加入相应的配置文件l文件
log4j.properties
### set log levels ###
log4j.rootLogger = debug , stdout , D , E
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} =====================%5p %c{1}:%L - %m%n
这里加了一串等号 为检验下面是否得到了期望效果
这样即达到了转换实现类的效果,虽然系统调用的始终是SLF4J,但是实现框架就改变了