zoukankan      html  css  js  c++  java
  • springboot 日志框架

    一:市面上的日志框架:

    JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....

    左边是日志门面(抽象层)、右边是日志的实现:

    日志门面(日志抽象层) 日志实现

    JCL(Jakarta Commons Logging)

    SLF4j(Simple Logging Facade for Java)

    jboss-logging

    Log4j JUL(java.util.logging) Log4j2 Logback

    1.日志门面对比,以及springboot的日志门面选择:

    JCL:Jakarta Commons Logging,是Apache公司给我们的commons-logging包。是apache旗下Jakarta小组开发的,所以叫Jakarta Commons Logging两个基本的抽象类:Log(基本记录器)和LogFactory(负责创建Log实例)

    最后一次更新是2014年,廉颇老矣,尚能饭否,现在已经很少使用了

    jboss-logging:使用的场景太少了,普通的业务开发很少用,都是特定的框架在用,eg:hibernate框架

    SLF4j:Simple Logging Facade for Java,简单的日志门面

    所以springboot最终的日志门面选择:slf4j

    2.日志实现对比,以及springboot的日志实现选择:

    Log4j:log for java,是Apache的提供的开源的java日志框架

    JUL:java.util.logging,是jdk自带的日志,是因为当时log4j太火了,害怕日志市场被人家占领了,所以勉强的加了一个日志工具  

    Log4j2:是对Log4j的一次重大升级。其实是借了log4j之名,是apache公司重新做的日志框架,整个日志框架设计的也特别好,但是现在的很多框架还没适配起来,还没有得到广泛的使用

    LogBack:比log4j先进,用的地方比较多,

    所以springboot最终的日志实现选择:logback

    补充:

    log4j和logback都是同一个人写的,在对log4j升级的:

    当时写出来log4j还不错,后来出现性能问题了,要对log4j进行升级了,就写了logback框架, 为了适应更多的日志实现框架,他就写了日志门面slf4j日志门面,

    所以log4j、logback、slf4j都是出自同一个人之手    

    JCL、slf4j等日志框架都是日志实现的抽象层,编码的时候,面向日志抽象层编码,之后给项目中导入具体的日志实现就行了

     二:springboot的默认日志选择

    SpringBoot:底层是Spring框架,而Spring框架默认选用的日志框架是用JCL(commons-logging);而 SpringBoot框架默认选用的是SLF4j和logback;

    这样能够兼容是因为:springboot已经把spring框架的默认日志依赖移除掉了:

    Spring框架选用的是:commons-logging日至门面

    Hibernate底层是:jboss-logging日志门面

    Springboot底层是:slf4j日志门面

    三:slf4j简介

    slf4j主要是为了给Java日志访问提供一个标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接。本文侧重分析slf4j,也会解释门面+桥接器+实现的原理。

     
    slf4j+logback的正确的用法:
    给系统中导入slf4j、logback的jar,应用程序面向slf4j编程,调用它的抽象层方法,进行日志记录;而我们在系统中也导入了日志的实现logback的jar包,虽然我们调用的是抽象层的方法,但是logback最终会进行实现,将日志记录到文件或者控制台。
    每一个日志的实现都有自己的配置文件,使用slf4j以后,配置文件还是要做成日志实现框架的配置文件。
    slf4j只提供统一的抽象层,用logback实现就写logback的配置文件,用log4j实现的就写log4j的配置文件,因为毕竟实现类是logback、log4j他们,要怎么输出日志,需要根据他们实现框架的配置文件来走。
    slf4j+log4j进行日志记录,需要导入的jar:
    给系统中导入slf4j、slf4j-log12.jar、log4j的jar(导入slf4j的jar、slf4j来适配log4j的jar、log4j真正实现的jar)
    log4j出现的比较早,应用程序还是统一调用抽象层,我们需要中间的一个适配层,适配层就相当于上面实现了slf4j的具体方法,在方法里面进行真正日志记录的时候,调用log4j的api方法
     
     
    日志框架转换:其他日志框架可以转为slf4j,参看slf4j官网:https://www.slf4j.org/manual.html
    如何让系统中所有的日志都统一到slf4j: 
    1、将系统中其他日志框架先排除出去;
    2、用中间包来替换原有的日志框架;
    3、我们导入slf4j其他的实现
     
     
     
     
     
     
  • 相关阅读:
    LeetCode 146
    Codeforces Round #644 (Div. 3) 题解
    AtCoder Grand Contest 044
    约数个数求解+约数求和(唯一分解定理)(遍历map的写法!)
    [蓝桥杯][2013年第四届真题]危险系数(DFS)
    Codeforces Round #674 (Div. 3)(A->D(前缀和出现次数))
    Codeforces Round #673 (Div. 2)B. Two Arrays(贪心)
    Codeforces Round #672 (Div. 2)(A->C2)(B位运算,C贪心,DP)
    质数笔记
    2020 CCPC
  • 原文地址:https://www.cnblogs.com/quan-coder/p/9907565.html
Copyright © 2011-2022 走看看