zoukankan      html  css  js  c++  java
  • log

    log桥接工具jcl-over-slf4j使用(项目用于排除commons-logging依赖的影响)

    过程如下:

    Component(服务)
    |
    | log to Apache Commons Logging(JCL)
    V
    jcl-over-slf4j.jar — (redirect) —> SLF4j —> slf4j-log4j12-version.jar —> log4j.jar —> 输出日志

     

    log4j-over-slf4j 可以理解为将log4j排除转成slf4j接口,把旧的日志log4j适配到slf4j

    如何在项目中使用Slf4j

    Slf4j与其他各种日志组件的桥接

    jar包名说明
    slf4j-log4j12-1.7.13.jar log4j1.2版本的桥接器,你需要将log4j.jar加入classpath。
    slf4j-jdk14-1.7.13.jar java.util.logging的桥接器,JDK原生日志框架。
    slf4j-nop-1.7.13.jar NOP桥接器,默默丢弃一切日志。
    slf4j-simple-1.7.13.jar 一个简单实现的桥接器,该实现输出所有事件到System.err. 只有INFO以及高于该级别的消息被打印,在小型应用中它也许是有用的。
    slf4j-jcl-1.7.13.jar Jakarta Commons Logging 的桥接器. 这个桥接器将SLF4j所有日志委派给JCL。
    logback-classic-1.0.13.jar(requires logback-core-1.0.13.jar) slf4j的原生实现,logback直接实现了slf4j的接口,因此使用slf4j与 logback的结合使用也意味更小的内存与计算开销

    具体的接入方式参见下图
    pic2

    如何桥接遗留的api

    在实际环境中我们经常会遇到不同的组件使用的日志框架不同的情况,例如Spring Framework使用的是日志组件是Commons logging,XSocket依赖的则是Java Util Logging。当我们在同一项目中使用不同的组件时应该如果解决不同组件依赖的日志组件不一致的情况呢?现在我们需要统一日志方案,统一使用SLF4J,把他们的日志输出重定向到SLF4J,然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具。Slf4j带有几个桥接模块,可以重定向log4j,JCL和java.util.logging中的API到Slf4j。

    遗留的api桥接方案

    jar包名作用
    log4j-over-slf4j-version.jar 将log4j重定向到slf4j
    jcl-over-slf4j-version.jar 将commos logging里的Simple Logger重定向到slf4j
    jul-to-slf4j-version.jar 将Java Util Logging重定向到slf4j

    桥接方式参见下图
    pic3

    使用slf4j桥接要注意事项

    在使用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同时存在会形成死循环
  • 相关阅读:
    多任务顺序执行解决方案
    数码摄影学习总结
    ASP.NET Core与RESTful API 开发实战(二)
    通过三点求圆心程序(二维和三维两种方式),代码为ABB机器人程序,其他语言也适用
    ABB机器人选项611-1 Path Recovery使用记录
    C#刷新chart控件方法及task的启停功能记录
    ABB机器人输送链跟踪问题记录
    有关C#跨线程操作控件的委托方法
    c#get、set属性及类的继承
    正则表达式学习记录
  • 原文地址:https://www.cnblogs.com/But-you/p/9722375.html
Copyright © 2011-2022 走看看