• Java日志体系(七)日志框架切换


    通过 SLF4J 统一日志

    在实际的日志转换过程中,SLF4J其实是充当了一个中介的角色。例如当我们一个项目原来是使用LOG4J进行日志记录,但是我们要换成LogBack进行日志记录。

    此时我们需要先将LOG4J转换成SLF4J日志系统,再从SLF4J日志系统转成LogBack日志系统。

    从日志框架转向SLF4J

    • jul-to-slf4j:jdk-logging到slf4j的桥梁
    • log4j-over-slf4j:log4j1到slf4j的桥梁
    • jcl-over-slf4j:commons-logging到slf4j的桥梁

    从SLF4J转向具体的日志框架

    • slf4j-jdk14:slf4j到jdk-logging的桥梁
    • slf4j-log4j12:slf4j到log4j1的桥梁
    • log4j-slf4j-impl:slf4j到log4j2的桥梁
    • logback-classic:slf4j到logback的桥梁
    • slf4j-jcl:slf4j到commons-logging的桥梁
     
    例如我们一开始使用的是 Log4J 日志框架,现在我们希望转成 LogBack 框架,那么我们首先需要加入 log4j-over-slf4j.jar 将 Log4J 转成 SLF4J,之后再加入 logback-classic.jar 将 SLF4J 转成 LogBack。
     
     
    上面只是一种简单的场景,现实中我们遇到的情况却要更复杂些:我们想使用 SLF4J 的API,但是系统中已经使用了 JCL、log4j 或者 J.U.L,我们该怎么办呢?
     
    SLF4J 为我们提供了从老接口切换到 SLF4J 的方法,如下图所示。
                

    我们以图中的左上部分为例来说明下。目前的应用程序中已经使用了如下混杂方式的API来进行日志的编程:

    • commons-logging
    • log4j1
    • J.U.L

    现在想统一将日志的输出交给 logback。解决方法是:

    • 第一步,先将上述日志系统的API全部无缝切换到 SLF4J
      • 去掉 commons-logging(其实去不去都可以),使用 jcl-over-slf4j 将 commons-logging 的底层日志输出切换到 SLF4J
      • 去掉 Log4j1(必须去掉),使用 log4j-over-slf4j,将 Log4j1 的日志输出切换到 SLF4J
      • 使用 jul-to-slf4j,将 J.U.L 的日志输出切换到 SLF4J
    • 第二步,让 SLF4J 绑定 Logback 来作为底层日志输出,加入以下 jar 包依赖
      • slf4j-api
      • logback-core
      • logback-classic
     

    在使用Slf4j桥接时要注意避免形成死循环,在项目依赖的jar包中不要存在以下情况:

    多个日志jar包形成死循环的条件 产生原因
    log4j-over-slf4j.jar和slf4j-log4j12.jar同时存在

    由于slf4j-log4j12.jar的存在会将所有日志调用委托给log4j。但由于同时由于log4j-over-slf4j.jar的存在,会将所有对log4j api的调用委托给相应等值的slf4j,所以log4j-over-slf4j.jar和slf4j-log4j12.jar同时存在会形成死循环

    jul-to-slf4j.jar和slf4j-jdk14.jar同时存在

    由于slf4j-jdk14.jar的存在会将所有日志调用委托给jdk的log。但由于同时jul-to-slf4j.jar的存在,

    会将所有对jul api的调用委托给相应等值的slf4j,所以jul-to-slf4j.jar和slf4j-jdk14.jar同时存在会形成死循环

     



     
     
     
     
     
     
     
     
  • 相关阅读:
    【USACO】又买饲料 单调队列dp
    数论:px+py 不能表示的最大数为pq-p-q的证明
    codeforces round #419 E. Karen and Supermarket
    [USACO4.1]麦香牛块Beef McNuggets
    【USACO】 录制唱片
    【USACO】 洞穴奶牛
    【USACO】奶牛抗议 树状数组+dp
    【USACO】 奶牛会展
    【LSGDOJ 2015】数页码
    阿里云合作伙伴峰会SaaS加速器专场 | 商业加持,迈进亿元俱乐部
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/11285988.html
Copyright © 2020-2023  润新知