Spring Boot日志详解

在Spring Boot中默认采用了slf4j作为日志的抽象接口,Logback作为具体的日志实现。在谈Spring Boot之前,先了解下Slf4j作为抽象接口是如何适配其他的实现类。

首先来看下slf4j官网的图

可以看到,slf4j可以直接适配的实现日志实现有logback,slf4j-simple和lf4j-nop,这些实现都出自slf4j作者之手,所有可想而知,就非常自然地可以与slf4j适配,而lo4j和jul作为出现在slf4j之前的日志实现,就需要一个适配层来适配sl4j,这里采用了适配器模式,适配层空实现了slf4j的所有方法,再在其中调用对应真正日志实现的方法。这样slf4j作为日志抽象层就能适配市面上所有的日志实现了。

但是我们知道Spring底层的日志是采用jcl作为日志抽象,另外一些依赖也有可能不用slf4j作为日志抽象,那么怎样解决这个问题呢,slf4j官方提出下面这种解决方法。

 

以commons-logging为例,

  • 去掉commons-logging
  • 使用jcl-over-slf4j将commons-logging的底层日志输出切换到slf4j
  • 加入slf4j-api
  • 导入logback

其原理就是commons-logging通过jcl-over-slf4j来选择slf4j作为底层的日志输出对象,而slf4j又选择logback来作为底层的日志输出对象,看似原来依赖的还是commons-logging,但其实已经转移为其他的抽象日志了。

Spring Boot也采用了这种方法,看下图pom依赖表

从上图可以看出,Spring Boot通过jul-to-slf4j.jar去适配了JUL日志框架,通过log4j-to-slf4j.jar去适配了log4j日志框架.

以log4j-to-slf4j为例

其中的类都是有关SLF4J相关的类,起到转换为SLF4J的作用。

 

总结

SpringBoot能自动适配所有的日志,其底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要 把这个框架依赖的日志框架排除掉即可,因为SpringBoot会通过自己的jar去替代。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值