JCL

全称为Jakarta Commons Logging,是Apache提供的一个通用日志API。 它是为 "所有的Java日志实现"提供一个统一的接口,它自身也提供一个日志的实现,但是功能非常常弱 (SimpleLog)。所以一般不会单独使用它。他允许开发人员使用不同的具体日志实现工具: Log4j, Jdk 自带的日志(JUL)。JCL是一种接口,具体要依赖于其他日志实现。

引入依赖:

 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>

查看一下源码,可知类结果很简单 主要有Log和LogFactory。Log具体的实现类有

Log功能相对比较简单,可以通过不同的实现来切换日志框架,JCL使用较少。

Slf4j

简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准、规范 的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。 当然slf4j自己也提供了功能较为简单的实现,但是一般很少用到。对于一般的Java项目而言,日志框架 会选择slf4j-api作为门面,配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接。

Slf4j定义了日志接口 其自身也自带了简单实现

<!--slf4j core 使用slf4j必須添加--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.28</version></dependency><!--slf4j 自带的简单日志实现 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.12</version></dependency>

slf4j-api接口类相对比较简单 Logger 和ILoggerFactory。

由于我们使用slf4j一般不使用其自带的简单实现,因此简单测试一下。

使用slf4j-api的好处:

1. 使用SLF4J框架,可以在部署时迁移到所需的日志记录框架。

2. SLF4J提供了对所有流行的日志框架的绑定,例如log4j,JUL,Simple logging和NOP。因此可以 在部署时切换到任何这些流行的框架。

3. 无论使用哪种绑定,SLF4J都支持参数化日志记录消息。由于SLF4J将应用程序和日志记录框架分离, 因此可以轻松编写独立于日志记录框架的应用程序。而无需担心用于编写应用程序的日志记录框架。

4. SLF4J提供了一个简单的Java工具,称为迁移器。使用此工具,可以迁移现有项目,这些项目使用日志 框架(如Jakarta Commons Logging(JCL)或log4j或Java.util.logging(JUL))到SLF4J。

绑定日志

如前所述,SLF4J支持各种日志框架。SLF4J发行版附带了几个称为“SLF4J绑定”的jar文件,每个绑定对应 一个受支持的框架。

使用slf4j的日志绑定流程:

1. 添加slf4j-api的依赖

2. 使用slf4j的API在项目中进行统一的日志记录

3. 绑定具体的日志实现框架 1. 绑定已经实现了slf4j的日志框架,直接添加对应依赖 2. 绑定没有实现slf4j的日志框架,先添加日志的适配器,再添加实现类的依赖

4. slf4j有且仅有一个日志实现框架的绑定(如果出现多个默认使用第一个依赖日志实现)

引入相应的日志实现以及绑定依赖

<!--slf4j core 使用slf4j必須添加--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.28</version></dependency><!-- log4j--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- jul --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.25</version></dependency><!--jcl --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jcl</artifactId><version>1.7.27</version></dependency><!-- nop --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.27</version></dependency>

可知slf4j-api在绑定不同的日志实现时有不同的适配器,其中log4j和jcl要通过适配器来切换。

SLF4J不依赖于任何特殊的类装载。实际上,每个SLF4J绑定在编译时都是硬连线的, 以使用一个且只有 一个特定的日志记录框架。只需将您选择的一个且只有一个绑定放到相应的类路径位置。不要在类路径上放置多个绑定。

slf4j原理

1. SLF4J通过LoggerFactory加载日志具体的实现对象。

2. LoggerFactory在初始化的过程中,会通过performInitialization()方法绑定具体的日志实现。

3. 在绑定具体实现的时候,通过类加载器,加载org/slf4j/impl/StaticLoggerBinder.class

4. 所以,只要是一个日志实现框架,在org.slf4j.impl包中提供一个自己的StaticLoggerBinder类,在 其中提供具体日志实现的LoggerFactory就可以被SLF4J所加载。

可以看一下上述两个适配依赖的类结构

logback目前使用较少,直接跳过。

具体可以参考:Logback Home

Java日志体系学习2--日志门面JCLSlf4j相关推荐

  1. Java架构体系学习路线图,这六点尤为重要!

    Web应用,最常见的研发语言是Java和PHP. 后端服务,最常见的研发语言是Java和C/C++. 大数据,最常见的研发语言是Java和Python. 可以说,Java是现阶段中国互联网公司中,覆盖 ...

  2. mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)...

    一. mysql错误日志: 错误日志记录的事件: a).服务器启动关闭过程中的信息 b).服务器运行过程中的错误信息 c).事件调试器运行一个事件时间生的信息 d).在从服务器上启动从服务器进程时产生 ...

  3. MySQL 通用查询日志和慢查询日志分析

    MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...

  4. java 异常 抛 效率_一文带你理清Java异常体系,提高开发效率

    一.概述 我们在项目开发的过程中使用异常是必不可少的事情,那么异常会带来哪些好处呢? 我们知道异常带来的最明显的好处是,它能够降低错误处理代码的复杂度.不使用异常的话,我们就必须检查一些特定的错误,并 ...

  5. Java日志体系日志门面(Slf4j)日志实现(Log4j、Log4j2)详解

    1.背景 近日发生两次因日志使用不当导致的线上问题: 1.应用明明配置了info日志级别,却打印大量的debug日志,导致磁盘IO较高,很快就报磁盘空间不足告警 2.应用服务启动后报StackOver ...

  6. Java学习笔记(二十三)日志体系(logback)

    Java日志体系(logback) logback 简介 师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版:在现如今的项目中,logb ...

  7. Java日志体系权威总结

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:http://r6d.cn/MSaE 概要 本文的目 ...

  8. Java日志框架 -- 日志框架介绍、日志门面技术、JUL日志(JUL架构、JUL入门示例、JUL日志级别、JUL日志的配置文件)

    1. 日志的概念 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 2. Java日志框架 问题: 控制日志输出的内容 ...

  9. java日志体系分析

    写在前面 Java中日志框架种类繁多,我也是最近在学习mybatis过程中对日志的使用产生了困惑,所以这里个人做下总结,希望能帮助到和我有一样困惑的朋友,下面我们就开始吧! 1:java日志的发展历史 ...

最新文章

  1. 图的顺序存储结构及C语言实现
  2. php服务器估算,使用zabbix API估算服务器磁盘空间可用天数
  3. 虚拟化整合实现1+1大于2的效果
  4. SQL拼接自己需要的字符串
  5. 使用C语言--判断素数的两种方法
  6. 使用Struts框架,实现用户登陆功能
  7. Rman 在非归档模式增量備份
  8. Python爬虫实战—vmgrils图片网站
  9. #NAME?_#NAME?:EXCEL表中出现#NAME是什么意思?
  10. badou大数据 五期
  11. Linux下的C语言——第九节 指针
  12. 哈佛啥时候已经成功制造了60只人工蜜蜂?2013年么?《黑镜》第三季第六集,细思极恐
  13. 极度的坦诚就是无坚不摧
  14. 关于win10应用商店打不开,win10应用商店明明连接网络确提示无网络连接,代码: 0x80131500
  15. VK第三方登录(JavaScript SDK)
  16. 巧妙利用博客来推广网站的方法
  17. ABB紧凑式组架并联电容器组QBank
  18. [爆笑网文]结婚前,请带她去游泳
  19. 匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!某批警察叔叔正在进行智力训练:1 2 3 4
  20. CCF计算机软件能力认证试题练习:201803-2 碰撞的小球

热门文章

  1. 循环移位之循环左移和循环右移
  2. stata 空间杜宾模型_利用STATA创建空间权重矩阵及空间杜宾模型计算命令
  3. PHP表单登记表,输出复选框的值
  4. python求一个小于该自然数的所有素数(或质数)
  5. typedef 范例解析
  6. E22 SX1268 LoRa模块传输测试(定点模式)发送接收串口消息 windows与linux环境下C语言代码
  7. 中国工业电气分销行业市场前瞻及未来发展趋势预测报告2022-2027年
  8. sqllite查询数据量_Sqlite大数据量查询优化比较
  9. matlab求解代数等式,2008-2009学年线性代数试卷A及答案
  10. 精通 正则表达式 看这一篇就够了