Log(jcl&slf4j)

日志接口

  jcl
  slf4j

日志实现

  log4j
  log4j2
  logback
  jul/java.util.logging/jdk14
  jcl默认实现
  slf4j默认实现

 

JCL    (jcl/common-logging/Apache Commons Logging)

apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。
当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱
  LogFactory 内部装载日志系统的流程如下:
  首先,寻找org.apache.commons.logging.LogFactory 属性配置。
  否则,利用JDK1.3 开始提供的service 发现机制,会扫描classpath 下的META-INF/services/org.apache.commons.logging.LogFactory
文件,若找到则装载里面的配置,使用里面的配置。
  否则,从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。
  否则,使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现

common-logging动态查找原理

Log 是一个接口声明。LogFactory 的内部会去装载具体的日志系统,并获得实现该Log 接口的实现类。LogFactory 内部装载日志系统的流程:
  首先,寻找org.apache.commons.logging.LogFactory 属性配置。
  否则,利用JDK1.3 开始提供的service 发现机制,会扫描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory文件,若找到则装载里面的配置,使用里面的配置。
  否则,从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。
  否则,使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现

主要类

Log
LogFactory

jcl使用组合

commons-logging-1.1.jar + log4j-1.2.15.jar

commons-logging-1.1.jar + Java Logging API

 

slf4j (Simple Logging Facade for JAVA)

java简单日志门面。类似于Apache Common-Logging,是对不同日志框架提供的一个门面封装,
可以在部署的时候不修改任何配置即可接入一种日志实现方案。但是,他在编译时静态绑定真正的Log库
  SLF4J 会在编译时会绑定import org.slf4j.impl.StaticLoggerBinder; 该类里面实现对具体日志方案的绑定接入。任何一种基于slf4j
的实现都要有一个这个类

slf4j静态编译绑定原理

SLF4J 会在编译时会绑定import org.slf4j.impl.StaticLoggerBinder; 该类里面实现对具体日志方案的绑定接入。任何一种基于slf4j 的实现都要有一个这个类。如:org.slf4j.slf4j-log4j12-1.5.6: 提供对 log4j 的一种适配实现。注意:如果有任意两个实现slf4j 的包同时出现,那么就可能出现问题

主要类

Logger
LoggerFactory

slf4j使用组合

slf4j-api(接口层) + 各日志实现包的连接层( slf4j-jdk14, slf4j-log4j) + 各日志实现包:

slf4j-api-1.6.1.jar

slf4j-api-1.6.1.jar + slf4j-nop-1.6.1.jar

slf4j-api-1.6.1.jar + slf4j-simple-1.6.1.jar

slf4j-api-1.6.1.jar + slf4j-log4j12-1.6.1.jar + log4j.jar

slf4j-api-1.6.1.jar + slf4j-jdk14.jar + jdk(java.util.logging)

slf4j-api-1.6.1.jar + logback-classic.jar+logback-core.jar


slf4j+log4j vs jcl+log4j

1.SLF4j+Log4j 与 JCL+Log4J 的使用方式差不多,主要差异就在 SLF4J 用 jar 来告知用哪种日志实现,而 JCL 是通过配置文件来获得该选择哪个日志实现
2.SLF4J 受类加载器的影响较小,不易产生内存溢出的问题,性能得到了改善,也顺应了潮流的发展--可方便部署到 OSGI 环境中

 

转载于:https://my.oschina.net/igooglezm/blog/1845662

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值