`
sammor
  • 浏览: 409763 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

commons-logging 与 log4j 的区别与联系

    博客分类:
  • J2SE
阅读更多

引言:

     为什么去使用log4j 我已经在前面的学习笔记之一已经谈过了,基本的使用也已经去涉及到了。

     而同样在apache下面的,还有一个commons-logging , 这里面又有什么玄机呢?下面就来说说两者的区别和联系。

 

一、log4j强大的日志处理 之上 commons-logging能为我们做什么?

     Log4j的强大也可以从它的普及之广可以看出,多少程序员对它的推崇,而它的处理能力确实也深受爱戴。而在这里面commons-logging给我们带来的更是Log4j的封装。

     1、commons-logging能把日志处理的log4j或其他的处理工具与项目进行解耦,解耦带来的好处,相信大家都知道,它便于我们更新技术,更改使用的方式。而不去涉及太多的改到。避免过度的紧密结合带来的许多问题

     2、commons-logging可以自动的选择日志实现的系统,它甚至不需要配置

 

    总结区别 :Log4j是一个强大的日志实现的系统,而commons-logging是一个十分便利的接口,对Log4j的优势的封装,使日志实现系统与项目做到解耦的效果。

    ps: commons-logging 不仅仅对Log4j的封装,还有着其他的日志实现系统,包括它自身简单的日志实现系统

 

二、commons-logging 与 log4j 的结合使用

 

     简单的实例应用:

  1. 找到commons-logging的jar包  commons-logging-1.1.1.jar 并导入
    p.s:如果是maven工程的话,可直接在pom.xml中直接加入
<dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
</dependency>
  1. 这里面回顾下学习笔记之1 的那个例子,做一个小小的改动
//创建一个私有的日志对象
//private Logger log = Logger.getLogger(TestLog4j.class);
private static Log log = LogFactory.getLog(TestLog4j.class);

 

     将原有的创建日志记录注释,改成上面的方式。

     引用的类分别为

 

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 

    运行测试,显示正常。就这样引用commons-logging的方式就这样完成了。

    这里面更可以注释掉

//加载配置文件
//PropertyConfigurator.configure("D:\\log4j.properties");

    只要把

log4j.properties

    这个配置文件放在classpath中(即项目目录下的bin文件夹中)

    运行,成功显示。

   

 三、commons-logging如何查找对应的日志实现系统

    上面的例子中,说明了commons-logging与Log4j相结合的方式。但在这里commons-logging如何判断用Log4j来做日志实现的系统呢?

    而这一点正是commons-logging的友好之处。commons-logging封装了Log4j,JDK,及自身拥有的SimpleLog;
    这里的运行流程为:

    1)   首先在 classpath 下寻找自己的配置文件 commons-logging.properties,如果找到,则使用其中定义的 Log 实现类;
    2)   如果找不到 commons-logging.properties 文件,则在查找是否已定义系统环境变量有着org.apache.commons.logging.Log,找到则使用其定义的 Log 实现类;
    3)   否则,查看 classpath 中是否有 Log4j 的包,如果发现,则自动使用 Log4j 作为日志实现类;
    4)   否则,使用 JDK 自身的日志实现类(JDK1.4 以后才有日志实现类);

    5)   否则,使用 commons-logging 自己提供的一个简单的日志实现类 SimpleLog;

 (对官方文档的理解,具体与官方文档为准)

 

   在这里,它的友好之处也就体现出来了。

   1、可以不需要有配置文件,指的是commons-logging.properties

   2、会自动查找最适合的日志实现方式,如Log4j,还是需log4j.properties的,不要和第一条混淆了。

   3、在最坏的情况下,也有着自身的日志实现类SimpleLog来做日志处理。

 

 

END

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics