java 日志接口 commons-logging

一 :为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一?
        Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,使我们的项目不和具体的日志系统绑定的过于紧密,可以随意更改日志系统实现而不用改动项目本身。 使用Commons-loggin的另外一个好处是使得项目中其它组件的日志输出都有一致的形式和级别控制等管理。Commons-loggin自身的日志功能比较弱(只有一个简单的SimpleLog),所以一般不会单独使用它。

Log4j的功能非常全面强大,是目前的首选。几乎所有的Java开源项目都会用到Log4j,Log4j的项目一般也同时会用到commons-logging。

二 :Commons-logging选择’日志实现系统”的流程:

1)  首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类;
2)  如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类;( 一个叫 :CATALINA_OPTS 的环境变量给他的值 : - Dorg.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog  - Dorg.apache.commons.logging.simplelog.defaultlog = warn)

3)  否则,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类;


4)  否则,使用JDK自身的日志实现类(JDK1.4以后才有日志实现类);

5)  否则,使用commons-logging自己提供的一个简单的日志实现类SimpleLog;
(以上顺序不保证完全准确,请参考官方文档)

可见,commons-logging总是能找到一个日志实现类,并且尽可能找到一个“最合适”的日志实现类,最悲观的情况下也总能保证提供一个日志实现(SimpleLog)。一般不使用commons-logging的配置文件,也不设置与commons-logging相关的系统环境变量,我们使用具体的日志系统一般需要设置具体的日志系统的配置文件即可。比如我们使用Log4j需要设置log4j.properties即可。引用commons-logging并没有使问题复杂化,反而简单了、松耦合了、易于管理了。达到了 1+1 小于2 的效果!


三、使用日志系统总结
        将commons-logging和Log4j的jar包都放置到classpath下,同时也将Log4j的配置文件放到classpath中,两者就可以很好的合作。
采用Log4j配合commons-logging作为日志系统,是目前Java领域非常非常流行的模式,使用非常非常的普遍。两者的结合带来的结果就是:简单 + 强大。
commons-logging提供了简捷、统一的接口,不需要额外配置,简单,java代码 完全看不到log4j的影子而只与commons-logging交涉(这就是面向接口编程的感觉!)
Log4j功能非常全面、强大;commons-logging仅仅对Log4j(当然还包括其它LOG实现)作了一层包装,具体的日志输出还是在内部转交给身后的Log4j来处理;而Log4j虽然做了所有的事情,两者堪称绝配。


你可能感兴趣的:(java 日志接口 commons-logging)