java 日志各组件的关系

      java 的日志有好几个相关的东西,commons.logging(JCL),slf4j,log4j,logback,java.util.logging(JUL)....

      乍一看,一头雾水,那么从头说起。

      一开始,大家各写各的日志组件,比如,log4j,jul。。。这样不便于互换,所以出现了所谓的接口类,接口类本身不实现日志功能,日志功能还是由log4j,jul来干,接口类只是把日志请求转到真正的实现类上。所以,日志组件大致就分两类:接口组件,和实现组件。

      现在,接口组件有两个,一个是:commons.logging((JCL)), 另一个是:slf4j. slf4j更流行些。

      实现组件有:

             simplie Logger( commons.logging 自带的实现类) ;

             log4j;

             logback;

             java.util.logging(JUL),从JDK1.4起就包含。

      log4j 出现得最早,JUL 是sun 的,选择的人比较少。logback 据说是性能最好的。

      为了把接口组件能够调用到实现组件,一般来说还需要一个绑定组件,比如slf4j-log412.jar 就是用来让slf4j 调用 log4j,slf4j-jdk14.jar  就是让slf4j调用到 JUL的。

      所以,在自己写应用时,可以有两种选择,一种:直接就采用实现组件;另外一种是实现类加接口类,这样更多点灵活性。

      事情到这里,当然还没完,假如应用中有一个第三方库,其中使用的日志方案是与自己的应用的日志方案是不一样的,那么怎么办?比如自己的应用中是用slf4j + logback, 而第三方库是用log4j。那么,这时候需要一个桥接组件,log4j桥接到slf4j的是log4j-over-slf4j.jar。这样,第三方库的log4j 的请求会转到slf4j上,最后由logback来执行。

      转到slf4j的桥接组件如下:

      log4j-over-slf4j.jar ,   log4j 转到 slf4j.jar

      jul-to-slf4j.jar,            java.util.logging(JUL) 转到slf4j.jar

      jcl-over-slf4j.jar         commons.logging(JCL) 转到slf4j.jar

 

     大致就是这样,总结一下:

     1.接口组件来统一接口,

     2.由绑定组件将接口转到实现组件上,

     3.为了实现一个系统中有多个不同的日志组件,需要一些桥接组件。

 

      

猜你喜欢

转载自neo-it.iteye.com/blog/2211775