博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log(jcl&slf4j)
阅读量:7172 次
发布时间:2019-06-29

本文共 2257 字,大约阅读时间需要 7 分钟。

hot3.png

日志接口

  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 实现

主要类

LogLogFactory

jcl使用组合

commons-logging-1.1.jar + log4j-1.2.15.jarcommons-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 的包同时出现,那么就可能出现问题

主要类

LoggerLoggerFactory

slf4j使用组合

slf4j-api(接口层) + 各日志实现包的连接层( slf4j-jdk14, slf4j-log4j) + 各日志实现包:slf4j-api-1.6.1.jarslf4j-api-1.6.1.jar + slf4j-nop-1.6.1.jarslf4j-api-1.6.1.jar + slf4j-simple-1.6.1.jarslf4j-api-1.6.1.jar + slf4j-log4j12-1.6.1.jar + log4j.jarslf4j-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

你可能感兴趣的文章
操作系统多进程编程、多线程编程
查看>>
fread和fseek的用法
查看>>
PHP获取网站中各文章的第一张图片的代码示例
查看>>
Python的pandas
查看>>
ON DUPLICATE KEY UPDATE
查看>>
CRF 及CRF++ 安装与解释
查看>>
SQL Server 合并复制的Article可以指定单个对象的更新方向
查看>>
hreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
查看>>
npm常用命令
查看>>
String,StringBuffer和StringBuilder三者的讲解
查看>>
Understanding Digital Raw Capture
查看>>
(轉貼) 康乃爾筆記法(Cornell Method) (雜項)
查看>>
(原創) unnamed object的多型只能使用reference (C/C++)
查看>>
10种有用的CSS技巧
查看>>
linux命令tree用法详解
查看>>
matlab练习程序(TV模型图像修复)
查看>>
用户接口(UI)设计的 20 条原则
查看>>
Windows Azure HandBook (3) 浅谈Azure安全性
查看>>
div+css布局入门
查看>>
Linux 下Apache和Resin的安装
查看>>