SpringBoot_日志-其他日志框架统一转换为slf4j

前面说了slf44的使用原理,但是实际在开发的时候,我们可能场景更复杂一点,一些遗留问题我们来说一下,

什么遗留问题呢,假设现在是A系统,我开发A系统的时候,我是使用slf4j+logback的方式,我是面向slf4j编程,

里面的记录都是使用slf4j,但是我在开发A系统的时候,我要依赖spring框架,我可能还要依赖hibernate框架,

我可能还要依赖mybatis,可能一大堆,但是每一个框架,他在底层可能也用到了日志,而且还各不相同,比如我们

Spring底层用的就是commons-logging,它是用它来做日志记录的,而hibernate使用的是jboss-logging,他又用

他来做日志记录,等等等等我们就不说了,那么现在就出现了什么问题呢,我们系统里边既有slf4j和logback,

我用它来做日志记录,而其他框架又用别的日志记录,这个感觉就是一个日志杂种一样,这也有那也有,那我们现在

想要做一件事,就是统一日志记录,即使别的框架,你最终也用到slf4j和logback,即使是别的框架,和我一起使用

slf4j和logback,进行输出,即使框架底层的一些日志,我要调配置文件,我就不用写commons-logging配置,我就写

logback一个配置就行了,我们统一都让他来用,那这个能不能做啊,我们也能做,我们看slf4j的首页

https://www.slf4j.org/

有一个legacy APIs.

https://www.slf4j.org/legacy.html

在这也有一张图

SpringBoot_日志-其他日志框架统一转换为slf4j_第1张图片

帮我们统一来使用slf4j,我们应用程序,以前要用slf4j+logback,我们先竖着看,我们应用程序面对slf4j编程,

但是事情往往不那么美,我们应用程序可能依赖别的框架一大堆,而每一个框架又用不同的日志,有些框架用commons-logging,

有些用log4j,有些用java util logging,而我把所有的框架统一都用slf4j,我们可以这么来做,我们把其他框架的所有

这些日志,我用这些包来换,如果你的框架是commons-logging-api,你用这个jcl-over-slf4j,这个jar包,叫替换你这个

commons-logging,替换的意思,也就是你要把对commons的依赖,排除掉,但是我们想想,如果我正在使用spring框架,

我排除了commons-logging,我就单说spring,spring都运行不起来了,他都会报错,commons-logging找不到,他在框架的底层,

凡是记录日志,都要用到commons这个类,那我就用新的jar包,新的jar包其实就是偷天换日包,狸猫换太子包,这个包的功能,

其实就是说,跟commons-logging一样,commons-logging里面有啥类,这里面也有什么,但是我们spring已经

把commons-logging排除掉了,我引入了这个包,但是我们里面要使用commons-logging这个类,

在这个包里面还是有的,然后我们spring框架就不会报错了,

调用的类在我新的包里面有,真正的实现怎么办呢,它又调到slf4j,slf4j又调到真正的实现,我们相当中间又有一个适配层,

可以把它叫做一个包装层,Commons-logging用jcl,log4j去掉用log4j-over-slf4j,相当于把log4j转成slf4j,

你把原来的java utillogging,你给我去掉,然后用jul-to-slf4j,就是用这些东西,

这些就是不同的日志框架,转换成slf4j的转换,再举一个例子,

我现在想要slf4j+log4j的组合,我日志接口,我选择slf4j,我的实现我选择log4j,还是按照我们以前的用法,我们先竖着来看,

那就应该是我程序开发的时候,我面向slf4j编程,而slf4j最终是用log4j来做日志记录,但是由于log4j还不知道slf4j,我们导了

中间的一个适配层,如果我们是单线来使用,没啥问题,但是我们往往在这个应用中,又有别的框架在使用别的日志,如果他在使用

log4j,那就没得说了,不用管,它使用的是commons-logging和java util logging,怎么办呢,

那就把别的框架的commons-logging,

首先排除掉,然后用他替换,java util logging用他替换,我们是这种,如果我们相用slf4j加入java util logging的方式,

那怎么办,同样我们竖着来看这一支,由于我们应用里面导入了其他的框架,我就把其他应用要用的日志包,我来排除掉,然后用jar包

来替换一下,但是替换到底是怎么办的,你一会可以看到源码,所以我们想要其他日志,统一起来,就要这么来用
我们想要统一日志记录也行,你给我这么做,如何让系统所有的日志都统一到slf4j,很简单,三步走,

第一步先将系统中其他日志框架先排除出去,比如我导spring的时候,我让他别导入commons-logging,

但是我们如果只做排除,spring框架可能就运行不起来了,用中间包来替换原有的日志框架,中间包的作用就是用来替换,

然后接下来第三步,我们再来使用slf4j其他的实现,我要用logback的,那你把其他的给转换过来,如果我要用log4j的,

那你就把其他的给转换过来,springboot也是这么来做的

SpringBoot_日志-其他日志框架统一转换为slf4j_第2张图片

 

你可能感兴趣的:(SpringBoot_日志-其他日志框架统一转换为slf4j)