`

Log日志框架的学习四. jcl-over-slf4j桥接工具简介

阅读更多
转载自:http://ivarptr.blogspot.com/2011/02/slf4j.html
 
        Java 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很多其他很多日志工具,假如一个应用程序用到了两个组 件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了。
 
为了解决这个问题,Apache Commons Logging (之前叫 Jakarta Commons Logging,JCL)粉墨登场,JCL 只提供 log 接口,具体的实现则在运行时动态寻找。这样一来组件开发者只需要针对 JCL 接口开发,而调用组件的应用程序则可以在运行时搭配自己喜好的日志实践工具。
 
所以即使到现在你仍会看到很多程序应用 JCL + log4j 这种搭配,不过当程序规模越来越庞大时,JCL的动态绑定并不是总能成功,具体原因大家可以 Google 一下,这里就不再赘述了。解决方法之一就是在程序部署时静态绑定指定的日志工具,这就是 SLF4J 产生的原因。
 
跟 JCL 一样,SLF4J 也是只提供 log 接口,具体的实现是在打包应用程序时所放入的绑定器(名字为 slf4j-XXX-version.jar)来决定,XXX 可以是 log4j12, jdk14, jcl, nop 等,他们实现了跟具体日志工具(比如 log4j)的绑定及代理工作。举个例子:如果一个程序希望用 log4j 日志工具,那么程序只需针对 slf4j-api 接口编程,然后在打包时再放入 slf4j-log4j12-version.jar 和 log4j.jar 就可以了。
 
现在还有一个问题,假如你正在开发应用程序所调用的组件当中已经使用了 JCL 的,还有一些组建可能直接调用了 java.util.logging,这时你需要一个桥接器(名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J,所谓的桥接器就是一个假的日志实现工具,比如当你把 jcl-over-slf4j.jar 放到 CLASS_PATH 时,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里,然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具。过程如下
 
Component
   |
   | log to Apache Commons Logging
   V
 jcl-over-slf4j.jar --- (redirect) ---> SLF4j ---> slf4j-log4j12-version.jar ---> log4j.jar ---> 输出日志
 
看到上面的流程图可能会发现一个有趣的问题,假如在 CLASS_PATH 里同时放置 log4j-over-slf4j.jar 和 slf4j-log4j12-version.jar 会发生什么情况呢?没错,日志会被踢来踢去,最终进入死循环。
 
所以使用 SLF4J 的比较典型搭配就是把 slf4j-api、JCL 桥接器、java.util.logging(JUL)桥接器、log4j 绑定器、log4j 这5个 jar 放置在 CLASS_PATH 里。
 
不过并不是所有APP容器都是使用 log4j 的,比如 Google AppEngine 它使用的是 java.util.logging(JUL),这时应用 SLF4J 的搭配就变成 slf4j-api、JCL桥接器、logj4桥接器、JUL绑定器这4个 jar 放置在 WEB-INF/lib 里。
分享到:
评论

相关推荐

    jcl-over-slf4j-1.6.0.jar logbank转log4j 日志转换 使用场景 实例

    在实际使用场景中,例如,当您的项目已经使用了JCL,但您想升级到更强大的日志框架Log4j时,`jcl-over-slf4j-1.6.0.jar`就能派上用场。只需将JCL替换为SLF4J桥接包,然后配置Log4j的配置文件,就可以实现平滑过渡。 ...

    slf4J的所有相关jar

    使用SLF4J的关键在于,通过在项目中引入`slf4j-api.jar`,然后根据实际需求选择合适的日志实现(如logback或log4j),并通过相应的适配器(如`slf4j-log4j12.jar`)桥接SLF4J接口与具体日志框架。这样,如果将来需要...

    slf4j包1.6.4版

    - **其他绑定**:SLF4J还支持其他日志系统,如log4j-over-slf4j.jar(Log4j到SLF4J的桥接)、jcl-over-slf4j.jar(Jakarta Commons Logging到SLF4J的桥接)等。 3. **SLF4J的优势** - **灵活性**:SLF4J允许在不...

    java日志组件的那些破事_.docx

    配置Logback,开发者需要在项目的Maven依赖中引入`slf4j-api`、`logback-core`和`logback-classic`,以及可能需要的桥接器,例如`log4j-over-slf4j`和`jcl-over-slf4j`。在实际项目中,还需要编写`logback.xml`配置...

    浅谈Slf4j与其他日志系统兼容的使用方法

    例如,log4j-over-slf4j包将log4j的日志输出重定向到SLF4J,而jul-to-slf4j则实现了Java Util Logging(JUL)到SLF4J的桥接。对于JUL,由于它是Java内置的,无法直接修改其源码,所以通过扩展JUL的Handler机制来实现...

    使用Logback的10个理由

    通过使用适当的桥接库,如 jcl104-over-slf4j.jar,可以轻松地将现有的JCL或log4j日志调用转换为SLF4J,从而方便地迁移到logback。 5. **JUL支持**:如果你的项目中已经使用了JUL,logback 也提供了直接支持,通过...

    Struts2、Spring、Mybatis日志jar包

    使用SLF4J时,需要在项目中引入`slf4j-api.jar`,并且选择一个具体的日志实现,比如`logback-classic.jar`(对应Logback)或`log4j-over-slf4j.jar`(桥接Log4j)。 在提供的压缩包文件"lib"中,很可能包含了这三大...

    java实现FTP服务器

    此外,[jcl-over-slf4j-1.5.2.jar]是一个桥接库,用于将Jakarta Commons Logging(JCL)的日志调用重定向到SLF4J。 FTP服务器的核心组件是[ftpserver-core-1.0.6.jar],这是一个独立的FTP服务器实现,它可能包含了...

    Mybatis集成Spring的实例代码_动力节点Java 学院整理

    - `jcl-over-slf4j` 和 `slf4j-log4j12` 用于桥接Jakarta Commons Logging并使用Log4j作为实际的日志实现。 4. **@Inject**: - `javax.inject` 提供了JSR 330规范的注解,如`@Inject`,可以与Spring的依赖注入...

    Java日志组件间关系详解

    在这种情况下,可以通过引入jcl-over-slf4j这个组件,将Spring内部的Commons-Logging替换为SLF4J,从而避免日志实现的冲突。这种方法称为“重定向”或“绑定”,它使得我们的应用程序能够按照预期使用自选的日志系统...

Global site tag (gtag.js) - Google Analytics