JCL日志门面

什么是日志门面?

当我们的系统变的更加复杂的时候,我们的日志就容易发生混乱。随着系统开发的进行,可能会更新不 同的日志框架,造成当前系统中存在不同的日志依赖,让我们难以统一的管理和控制。就算我们强制要 求所有的模块使用相同的日志框架,系统中也难以避免使用其他类似spring,mybatis 等其他的第三方框 架,它们依赖于我们规定不同的日志框架,而且他们自身的日志系统就有着不一致性,依然会出来日志体系的混乱。
所以我们需要借鉴JDBC 的思想,为日志系统也提供一套门面,那么我们就可以面向这些接口规范来开 发,避免了直接依赖具体的日志框架。这样我们的系统在日志中,就存在了日志的门面和日志的实现。
简单来说,日志门面就是一套规范的,通用的接口,具体的日志实现可以根据这套接口去实现具体的日志框架,这样如果将来项目需要更换日志框架,就可以只替换实现框架,而不用去修改自己的代码

JCL简介

JCL全称为Jakarta Commons Logging ,是 Apache 提供的一个通用日志 API
它是为 " 所有的 Java 日志实现 " 提供一个统一的接口,它自身也提供一个日志的实现,但是功能非常常弱 (SimpleLog )所以一般不会单独使用它。他允许开发人员使用不同的具体日志实现工具 : Log4j, Jdk ,自带的日志(JUL)
JCL 有两个基本的抽象类: Log( 基本记录器 ) LogFactory( 负责创建 Log 实例 )
  • 框架结构

JCL由Apache提供的一个通用日志API,包名: org.apache.commons.logging,有两个抽象类: 

  1. Log:基本记录器
  2. LogFactory:负责创建Log实例
  •  LogFactory查找日志工具的顺序
  1. 寻找当前factory中名叫org.apache.commons.logging.Log配置属性的值;
  2. 寻找系统中属性中名叫org.apache.commons.logging.Log的值;
  3. 如果应用程序的classpath中有log4j,则使用相关的包装(wrapper)类(Log4JLogger);
  4. 如果应用程序运行在jdk1.4的系统中,使用相关的包装类(Jdk14Logger);
  5. 使用简易日志包装类(SimpleLog)。

 原理

JCL默认的情况下,会使用JUL日志框架做日志的记录操作。

 JCL快速入门

默认实现(JCL+JUL)
  • 添加依赖
<dependency>
        <groupId> commons-logging </groupId>
        <artifactId> commons-logging </artifactId>
        <version> 1.2 </version>
</dependency>

测试代码

@Test
public void JCLQuickTest(){
    // 创建日志对象
    Log log = LogFactory.getLog(JCLTest.class);
    // 日志记录输出
    log.fatal("fatal");
    log.error("error");
    log.warn("warn");
    log.info("info");
    log.debug("debug");
}

 

使用JCL+Log4j 


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

 创建commons-loggin.properties文件

org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger

 创建log4j.properties

#配置根  Loggers控制日志的输出级别与日志是否输出
log4j.rootLogger=trace,console
 
#配置输出到控制台  Appenders是指定日志的输出方式
log4j.appender.console=org.apache.log4j.ConsoleAppender
#指定输出控制台
log4j.appender.console.Target = System.out
#指定布局,输出日志的格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#指定布局的参数
log4j.appender.console.layout.ConversionPattern=[%-10p] %r %l %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
 

测试代码

  @Test
  public void test() throws Exception{
      // 获取log日志记录器对象
      Log log = LogFactory.getLog(JCLTest.class);
      if(log.isInfoEnabled()){
          log.info("hello jcl");
      }
   }
 

如果上面的测试代码可以成功运行,那么就代表成功了

总结:

JCL这个日志门面只支持JUL和log4j这二个日志实现,随着时代的发展,这二个日志实现已经基本被淘汰了,所以这个JCL也已经被淘汰了,学习它主要是学习它的思想,现在常用的日志门面时SLF4J这个日志门面。但JCL这种面向接口的开发思想很值得学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smilehjl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值