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的流程:
默认的LogFactory是按这个顺序去查找并决定最终使用的那个Log toolkit:
JCL使用:
使用JCL非常简单,只需要将commons-logging.jar放入到工程的lib目录下,并引入工程中即可。
这时只需要通过调用LogFactory.getLog(MyClass.class)就可以获取Logger, 但最终使用的是哪个Logger Implementation还取决于底层的环境。如果什么都没有配置并在jdk1.4+上运行,则获取的Logger为Jdk14Logger。由于Log4j的强大之处,很多工程已比较倾向于使用Log4j来写日志。为此,我们只需要通过配置log4j即可,而无需重新编译代码。
JCL + Log4j:
在不改变原有代码的情况下,只要下面两步即可。
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()),而需要修改自身的程序。
参考文档: