日志技术之JCL学习

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

JCL采用了设计模式中的“适配器模式”,它是为“所有的Java日志实现”提供的一个统一的接口,然后在适配类中将对日志的操作委托给具体的日志框架,它自身也提供一个日志的实现,但是功能非常弱(SimpleLog)。所以一般不会单独使用它。它允许开发人员使用不同的具体日志实现工具:Log4j,jdk自带的日志(JUL)

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

1、JCL入门

1.1、新建maven工程

1.2、添加依赖

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

1.3、入门代码

 //入门代码
    @Test
    public  void test01() throws Exception{
        //1、获取log日志记录器对象  org.apache.commons.logging.Log;
        Log log = LogFactory.getLog(JCLTest.class);

        //2、日志记录的输出
        log.info("Hello JCL");           //默认调用JDK14,加入log4j依赖和配置文件后,就调用log4j
    }

测试

这里不加配置文件和log4j的依赖,默认调用的是JDK14,加了依赖和配置文件后,就会调用log4j

加入log4j依赖和配置文件

  <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
#指定RootLogger 顶级父元素默认配置信息
#指定日志级别是trace,使用appender为console,file,rollingFile ,dailyFile,logDB
log4j.rootLogger = info,console

#


#1、指定控制台日志输出的appender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#指定消息格式layout,使用简单格式SimpleLayout ,HTML格式HTMLLayout,xml格式xml.XMLLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#指定消息格式的内容
#log4j.appender.console.layout.conversionPattern = %r [%t] %p %c %x - %m%n
log4j.appender.console.layout.conversionPattern =[%p] %r %l %d{yyyy-MM-dd- HH:mm:ss:SSS} %m%n

测试

1.4、我们为什么要使用日志门面

(1).面向接口开发,不再依赖具体的实现类。减少代码的耦合;

(2).项目通过导入不同的日志实现类,可以灵活的切换日志框架;

(3).统一API,方便开发者学习和使用;

(4).统一配置便于项目日志的管理。

2、JCL原理

1.通过LogFactory动态加载Log实现类

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


private static final String[] classesToDiscover = {
    "org.apache.commons.logging.impl.Log4JLogger",
    "org.apache.commons.logging.impl.Jdk14Logger",
    "org.apache.commons.logging.impl.Jdk13LumberjackLogger",
    "org.apache.commons.logging.impl.SimpleLog"
};

3、获取具体的日志实现

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

以之前代码为例。这里首先会在 classesToDiscover 属性中寻找,按数组下标顺序进行寻找,开始我们没有加入log4j依赖和配置文件,这里 "org.apache.commons.logging.impl.Log4JLogger",就找不到,会继续在数组中寻找,第二个"org.apache.commons.logging.impl.Jdk14Logger",是JDK自带的,此时就使用它。当我们加入log4j依赖和配置文件后,就直接找到org.apache.commons.logging.impl.Log4JLogger,并使用它。如果需要再加入其它的日志,需要修改原码,并且在log中实现它,扩展性很不好。JCL已经被apache淘汰了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值