文章目录

  • 背景
  • JCL的诞生
  • JCL是什么?
  • 快速入门
  • JCL原理
  • 设计缺陷

背景

在前面博文中,我们分别讲述了常用的2个日志框架:JUL(Java Util Logging)、Log4J。那么如何选择使用哪一个呢?

根据项目需求而定,在项目设计之初,功能比较单一简单,那么我们可以使用JUL日志框架,使用起来非常灵活,也不需要引入第三方依赖,随着我们项目升级,迭代维护,功能会越来越完善,简单的日志实现框架就不能满足我们的业务需求,那么就要进行日志升级!

如果我们从JUL日志实现框架切换为Log4j的话,代码会受到冲突影响,虽然Log4j在1.2以后,为了迎合JUL的设计思想,也把自己代码改成logger了,但它的日志级别和配置信息还是有一定的差异化,如果我们的日志代码有一万行,那么都要进行修改,这无疑是增加了很多工作量。

JCL的诞生

为了解决这个问题,apache组织就站出来了,它就将当时比较主流的日志实现框架,例如 JUL、Log4j 将代码统一成一套API,后期软件开发阶段,只需要关联这套统一的API,就可以操作某一个日志实现框架的日志记录了,代码无需发生改变。

以面向接口的方式,来操作具体的实现。一种解耦合的思想,这个技术就是:JCL

比如web应用需要进行日志记录的话,不再直接依赖log4j、jdk14等日志实现了,而是依赖JCL这套统一的接口API,它会帮助我们调用具体的日志实现。

JCL是什么?

JCL 全称为Jakarta Commons Logging,是Apache提供的一个通用日志API。

JCL 有两个基本的抽象类:Log(基本记录器)和 LogFactory(负责创建Log实例)

快速入门

新建一个maven项目引入maven依赖,为了方便测试,同步也引入Junit

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>compile</scope></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>
</dependencies>

编写测试用例

// 注意:jcl日志框架引入的是org.apache.commons.logging包类
public class Demo {// 入门案例@Testpublic void testQuick(){// 1.通过LogFactory获取日志记录器Log log = LogFactory.getLog(Demo.class);// 2.打印日志信息log.info("hello JCL");}
}

LogFactory 负责创建具体log实例,底层调用Log4j 或 JUL(Java util logging) ,具体调用哪个取决于引入了哪个组件,上述例子没有引入Log4j依赖,因此它底层用的是JUL日志框架。

引入Log4j依赖

<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.13</version>
</dependency>

再次运行

⚠️ warn警告: 找不到logger对象的appenders处理器,它希望我们设置并初始化一个系统配置信息

# 设置rootLogger的日志级别为trace,appender处理器类型为ConsoleAppender
log4j.rootLogger = trace,consoleAppender
# "log4j.appender." 是前缀规范设置参数,myAppender是我们自己定义的appender的名称
# 设置appender类型为ConsoleAppender:将日志输出到控制台
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
# 设置名为myAppender的appender处理器的layout日志格式化类型
log4j.appender.consoleAppender.layout = org.apache.log4j.SimpleLayout

再次运行成功

JCL原理

其内部主要通过LogFactory 日志工厂去加载具体的日志实现

通过LogFactory动态加载Log实现类

日志门面支持的日志实现数组

public class LogFactoryImpl extends LogFactory {.....private static final String[] classesToDiscover = new String[]. {"org.apache.commons.logging.impl.Log4JLogger", "org.apache.commons.logging.impl.Jdk14Logger", "org.apache.commons.logging.impl.Jdk13LumberjackLogger", "org.apache.commons.logging.impl.SimpleLog"};.....}

日志工厂其内部有一个加载日志的数组,加载顺序是按照数组顺序来的,这也解释了为什么入门案例中引入了Log4J,JCL内部日志框架就从JUL切换至Log4J了。

具体实现代码

for(int i = 0; i < classesToDiscover.length && result == null; ++i) {result = this.createLogFromClass(classesToDiscover[i], logCategory, true);
}

总结

JCL是通过一个日志数组顺序加载,日志数组中包含:JCL的内置日志实现SimpleLog、log4j JUL(Java Util Logging)以及Jdk老版本的内置日志实现。

设计缺陷

如果后期又出现了新的日志实现主流框架,如果你想加载的话,就需要修改JCL源代码,实现Log接口,放入到日志加载数组中,因此JCl已经在2014年被apache淘汰了。

原文链接:https://blog.csdn.net/w15558056319/article/details/123793600

Java日志门面技术 JCL相关推荐

  1. Java日志门面技术 SLF4J

    文章目录 背景 SLF4J概述 切换日志框架 实际应用 配合自身简单日志实现(slf4j-simple) 配置logback日志实现 配置Log4J日志实现(需适配器) 配置JUL日志实现(需适配器) ...

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

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

  3. Java日志门面- JCL和 常用日志门面SLFJ详解

    使用日志门面的原因 目前经常用的日志框架技术有:JUL.Log4j.log4j2.logback用来记录日志信息 ,之前我们讲过,我们学习不同的日志框架.他们的API是不同的,这样难以进行有效的记忆, ...

  4. 学习Java日志框架之——搞懂日志门面(JCL+SLF4J)

    文章目录 系列文章目录 一.什么是日志门面 1.门面模式(外观模式) 2.日志门面 二.了解JCL 1.JCL组件结构 2.JCL案例 (1)JCL默认实现 (2)导入log4j测试原有程序 三.SL ...

  5. java日志框架之JCL和SLF4J

    文章目录 1.JCL 1.1.JCL简介 1.2.入门使用 2.SLF4J 2.1.日志门面概述 2.2.SLF4J简介 2.3.入门使用 2.4.slf4j实现slf4j-simple和logbac ...

  6. 日志框架(3) : 日志门面、JCL介绍、SLF4J介绍

    文章目录 日志门面 日志门面概述 门面模式(外观模式) 日志门面 常见的日志框架及日志门面 JCL简介 SLF4J SLF4J简介 SLF4J桥接技术 SLF4J特点 SLF4J集成日志实现(jul, ...

  7. 日志门面技术(3):JCL(Jakarta Commons Logging)

    目录 背景 ▎ JCL的诞生 JCL 是什么? ▎快速入门案例 JCL原理 ✈ 源码断点查看执行流程 JCL日志门面总结 ☁ 每日一题:为什么要学习日志门面JCL? 日志框架出现的历史顺序:Log4j ...

  8. Java日志框架 -- JCL日志门面(JCL概念介绍、JCL示例)

    1. JCL 全称为Jakarta Commons Logging,是Apache提供的一个通用日志API.是日志门面的一种实现方式,另外一种日志门面的实现方式是Slf4j. 它是为 "所有 ...

  9. Java日志系统03 ---- JCL门面日志

    目录标题 前言 简介 使用 Maven依赖 测试代码 切换Log4j日志 前言 当前文章只是学习笔记,具体请点击超链接:视频 简介 全称为Jakarta Commons Logging,是Apache ...

最新文章

  1. spring-aop入门
  2. C++编译器Qt Creator下载地址
  3. matlab“机器学习和深度学习”系列工具箱作用总结
  4. php大数组循环嵌套的性能优化
  5. 怎样安全的使用可变参数宏__VA_ARGS__
  6. 从Boxee的Amie Street访问音乐
  7. strcpy函数_错误更正(拷贝赋值函数的正确使用姿势)
  8. 解读设计模式----策略模式(Strategy Pattern)
  9. C++新特性探究(五):for循环、范围for语句
  10. 整数的二进制表示中 1 的个数
  11. linux 设置固定网络转发_关于 Linux 网络,你必须知道这些
  12. 解决QQ聊天自动转成表情
  13. 基于SpringBoot的社团管理系统的设计与实现
  14. 研究人性弱点的黑客?聊聊社会工程学与网络安全
  15. php CI框架单元测试
  16. MySQL的 初步认识 - 细节狂魔
  17. Unknown host 'dl.google.com'. You may need to adjust the proxy settings in Gradle.
  18. Oracle配置本地网络服务器测试不成功,无监听程序
  19. “嗲”上海文化,女人需要学会的4种气质
  20. 酒吧类型与其娱乐项目设置

热门文章

  1. 计算机网络本科形成性考核册6,2016年秋电大 中央电大计算机网络本科形成性考核册答案.doc...
  2. linux服务安全与监控二
  3. android icloud云盘,icloud备份恢复到安卓手机(全方面了解iCloud轻松玩转iCloud)
  4. mysql建图书馆表_数据库图书管理建表与修改表
  5. 封装微信小程序提现到零钱
  6. C Primer Plus 第六版 章节课后编程练习答案(下)(缘更)
  7. SQLserve数据库存储过程
  8. 尝试一下: 仅加密已用磁盘空间
  9. UVA475 KMP算法题
  10. mysql使用教程图文_MySQL使用教程图文详解