Logger

1、日志介绍

日志门面框架

JCL(Jakarta Commons Logging) 最后一次更新2014年
SLF4j(Simple Logging Facede for java)
jboss-logging 特定框架用

日志实现

Log4j 
Logback  
Log4j2 apache提供,性能最屌
JUL(java.util.logging) Java 提供

Log4j 与 Logback创始人是同一个,但Log4j 性能不如Logback。Logback直接实现了SLF4j的接口,Log4j需要一个转换器slf4j-log412.jar。

 2、如何使用SLF4J

图片地址:https://www.slf4j.org/images/concrete-bindings.png

图片文章地址:https://www.slf4j.org/manual.html

从图中可以看出:

  Logback原生实现SLF4j。

  Log4j需要有个转换器->slf4j-log412.jar。

  JUL需要有个转换器->slf4j-jdk14.jar。

       Slf4j-Simple原生实现SLF4j。

3、如何在项目中将别的日志框架整合到SJF4j里面

图片地址:https://www.slf4j.org/images/legacy.png

图片文章地址:https://www.slf4j.org/legacy.html

例如第一张图,底层使用Logback作为最终实现时。

  使用jcl-over-slf4j替换Commons logging。jcl-over-slf4j使用了Commons logging一样的API,但底层调用的时SLF4j的API。

  使用log4j-over-slf4j替换log4j。log4j--over-slf4j使用了log4j一样的API,但底层调用的时SLF4j的API。

  使用jul-to-slf4j替换log4j。jul-to-slf4j使用了jul一样的API,但底层调用的时SLF4j的API。

 4、日志死循环的问题

假设项目存两个jar包:slf4j-log412.jar,log4j-over-slf4j.jar

结果会怎么样呢?

   1、slf4j-log412.jar,对外提供slf4j的接口,内部调用log4j的接口,最终是要调用log4j的实现类的。

   2、log4j-over-slf4j.jar,对外提供log4j的接口,内部调用slf4j的接口,最终是要找slf4的实现了。

   最终死循环了:sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API->sjf4j的API -> log4j的API.......

 5、spring-boot 使用Logger的jar包依赖

Logback作为实现类: 

log4j-to-slf4j 对外提供log4j-api,对内转换成slf4j的调用
+- org.springframework.boot:spring-boot-starter-logging:jar:2.1.6.RELEASE:compile
|  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
|  |  - ch.qos.logback:logback-core:jar:1.2.3:compile
|  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.11.2:compile
|  |  - org.apache.logging.log4j:log4j-api:jar:2.11.2:compile

Log4j2作为实现类

+- org.springframework.boot:spring-boot-starter-log4j2:jar:2.1.6.RELEASE:compile
|  +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.11.2:compile
|  |  +- org.slf4j:slf4j-api:jar:1.7.26:compile
|  |  - org.apache.logging.log4j:log4j-api:jar:2.11.2:compile
|  +- org.apache.logging.log4j:log4j-core:jar:2.11.2:compile
|  +- org.apache.logging.log4j:log4j-jul:jar:2.11.2:compile
|  - org.slf4j:jul-to-slf4j:jar:1.7.26:compile

小知识点:

  maven依赖的命令:mvn dependency:tree。

  - 表示同层依赖的最后一个节点,如果你跟我一样困惑为啥有的是“+-” 有的是“-”的话。

原文地址:https://www.cnblogs.com/sleepingDogs/p/11133625.html