日志组件三:日志接口与日志实现框架

  前面介绍了log4j和log4j2这两种日志的实现,可是在具体使用中,它们通常不会单独出现,而是与日志门面结合使用;可是在咱们众多的业务系统中,因为开发者或者团队不一样,日志实现与日志接口的选型也是五花八门,这篇文章就是来整理下日志实现与日志框架之间的组合。主要参考:https://my.oschina.net/pingpangkuangmo/blog/406618java

 

1、日志组件概念

两种日志接口:commons-logging、slf4japache

四种日志实现:logging,log4j一、log4j二、logback编程

一、日志接口的做用

  目前一统江湖的就是apache的commons-logging和slf4j,他两的做用就是提供统一的接口,而具体的日志实现交给底层绑定的具体的日志实现框架。这样一来,咱们的业务系统中能够灵活的更换不一样的日志实现,而且能够不须要去改动代码。api

  对于开发者而言,每种日志都有不一样的写法。若是咱们以实际的日志框架来进行编写,代码就限制死了,以后就很难再更换日志系统,很难作到无缝切换。框架

二、jar包的对应:

logging:jdk自带的日志实现,简称jul(java-util-logging)
spa

log4j1:log4j.net

log4j2:log4j-api(定义的api)、log4j-core(api的实现)3d

logback:logback-core(logback的核心包)、logback-classic(logback实现了slf4j的API)日志

commons-logging简称jclblog

         commons-logging(commons-logging的原生所有内容)

         log4j-jcl(commons-logging到log4j2的桥梁)

         jcl-over-slf4j(commons-logging到slf4j桥梁)

slf4j:这个框架比较复杂,在整个日志组件中起到了一个中转站的做用

a、使用slf4j的api编程,底层用其余具体的实现:

slf4j-jdk14:slf4j到jdk-logging的桥梁

slf4j-log4j12:slf4j到log4j1的桥梁

log4j-slf4j-impl:slf4j到log4j2的桥梁

logback-classic:slf4j到logback的桥梁

slf4j-jcl:slf4j到commons-logging的桥梁

b、如使用log4j的api编程,但最终输出经过logback来实现,这样的话就必须先将log4j转交给slf4j,再经过slf4j转交给logback

jul-to-slf4j:jdk-logging到slf4j的桥梁

log4j-over-slf4j:log4j1到slf4j的桥梁

jcl-over-slf4j:commons-logging到slf4j的桥梁

2、组件集成

集成这块的业务代码中打印日志都是统一的格式,这也是日志接口为咱们带来的便利,因此打印日志不进行介绍,主要是不一样组合之间的jar包依赖,咱们重点观察pom文件的配置

一、log4j

二、log4j2

三、logback

这里出现了slf4j相关的jar包,其实logback官网的使用方式,就是和slf4j集成起来的,Logger、LoggerFactory都是slf4j的接口和类

四、commons-logging与jul集成

 

五、commons-logging与log4j1集成

六、commons-logging与log4j2集成

 

七、commons-logging与logback集成

八、slf4j与jdk-logging集成

九、slf4j与log4j1集成

十、slf4j与log4j2集成

 

十一、slf4j与logback集成

 

3、jar包冲突说明

一、jul-to-slf4j与slf4j-jdk14冲突

jul-to-slf4j: jdk-logging切换到slf4j

slf4j-jdk14:slf4j切换到jdk-logging

二、log4j-over-slf4j与slf4j-log4j12冲突

log4j-over-slf4j:log4j1切换到slf4j

slf4j-log4j12:slf4j切换到log4j1

三、jcl-over-slf4j与slf4j-jcl冲突

jcl-over-slf4j:commons-logging切换到slf4j

slf4j-jcl:slf4j切换到commons-logging  

相关文章
相关标签/搜索