Apache Common Logging(JCL)简介可以参考官网的用户手册。

官方User Guide文档入口: http://commons.apache.org/proper/commons-logging/guide.html

JCL简介

Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。

快速入门:

在使用JCL前需要了解下其提供的两个基本的抽象类以及其查找log toolkit的流程:

  1. Log
  2. LogFactory

默认的LogFactory是按这个顺序去查找并决定最终使用的那个Log toolkit:

  1. 查找当前Factory中的org.apache.commons.logging.Log(或log)配置的值,这个值可以是通过java code来显示地设置的,也通常都是通过读取classpath中的commons-logging.properties文件来获取。
  2. 如果第一步中没有找到,那么查找名为"org.apache.commons.logging.Log(或log)"的System property的设置。
  3. 如果Log4j在classpath中找到,就使用Log4jLogger.
  4. 如果应用运行在jdk1.4+之上,没有Log4J的情况下就使用jdk14Logger.
  5. 如果Log4jLogger和jdk14Logger都不存在,则使用默认的Logger: SimpleLogger. SimpleLogger将所有的Log messages都发到System.err上显示。

JCL使用:

使用JCL非常简单,只需要将commons-logging.jar放入到工程的lib目录下,并引入工程中即可。

这时只需要通过调用LogFactory.getLog(MyClass.class)就可以获取Logger, 但最终使用的是哪个Logger Implementation还取决于底层的环境。如果什么都没有配置并在jdk1.4+上运行,则获取的Logger为Jdk14Logger。由于Log4j的强大之处,很多工程已比较倾向于使用Log4j来写日志。为此,我们只需要通过配置log4j即可,而无需重新编译代码。

JCL + Log4j:

在不改变原有代码的情况下,只要下面两步即可。

  1. 加入commons-logging.jar和log4j.jar并引入到工程中去.
  2. 加入配置文件commons-logging.properties和log4j.properties

commons-logging.properties如下:

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

Log4j.properties如下:

log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern="%5p [%t] -%m%n"

最后

为什么要用JCL? 既然它只是桥,那么桥那边的路修了改了封了,与桥都无关,桥不动,汽车要过桥,只要桥没变,没限高,就没有必要改装汽车。所以只要使用JCL的程序,不论底层的logger的实现方式是否改变,程序本身都不需要重新编译。就如不会因为底层的log4j从1升级到2(Logger.getLogger() -> LogManager.getLogger()),而需要修改自身的程序。

参考文档

  • Apache Common Logging官方User Guide: http://commons.apache.org/proper/commons-logging/guide.html
  • Apache Log4J1.2用户手册:  https://logging.apache.org/log4j/1.2/manual.html
  • Apache Log4j 2用户手册:  http://logging.apache.org/log4j/2.x/manual/configuration.html
  • Apache Log4j2架构:http://logging.apache.org/log4j/2.x/manual/architecture.html

发表评论