• 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。

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

  • 相关阅读:
    杭州电acm理工大舞台版
    String.Split()功能
    android layout物业介绍
    讨厌OpenSSL
    Android Bundle类别
    多项式回归
    如何直接串行电缆以及空调制解调器串行电缆之间的区别?
    为什么写科技博客是情侣如此重要?
    SSH框架总结(帧分析+环境结构+示例源代码下载)
    RapidXml用法
  • 原文地址:https://www.cnblogs.com/sleepingDogs/p/11133625.html
Copyright © 2020-2023  润新知