cheun 发表于 2017-1-13 08:00:55

apache通用日志包commons-logging的简介以及与log4j的结合

  一、commons-logging简介


  commons-logging是为那些需要建立在不同环境下使用不同日志架构的组件或库的开发者创建的,其中包括 Apache Log4j以及Java log的日志架构。把日志信息commons-logging的Log接口,并由commons-logging在运行时决定使用哪种日志架构。
  commons-logging提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密耦合,可以自动选择适当的日志实现系统,甚至不需要配置。
  commons-logging实现自动选择日志实现系统的步骤如下:
  1)  首先在classpath下寻找自己的配置文件commons-logging.properties
,如果找到,则使用其中定义的Log实现类;
  其内容如下:

org.apache.commons.logging.log = 具体的实现类
  比如,使用log4j做为日志实现类,则commons-logging.properties
文件的内容为:

org.apache.commons.logging.log=org.apache.commons.logging.impl.Log4JLogger
  当然,在使用Log4j作为日志工具的时候,commons-logging.properties的配置可以不要。但是需要有log4j的配置文件log4j.properties。
  2) 如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量:org.apache.commons.logging.log,找到则使用其定义的Log实现类。
  如果在Tomact中可以建立一个名为CATALINA_OPTS 的环境变量 。

如果使用commons-logging自己的日志实现类,则该环境变量的值为:

- Dorg.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog - Dorg.apache.commons.logging.simpl
  3)  否则,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类;
  4)  否则,使用JDK自身的日志实现类(JDK1.4以后才有日志实现类);
  5)  否则,使用commons-logging自己提供的一个简单的日志实现类SimpleLog;
  
(具体内容请参考官方文档:http://commons.apache.org/logging/commons-logging-1.1.1/guide.html#Configuration

  可见,commons-logging总是能找到一个日志实现类,并且尽可能找到一个“最合适”的日志实现类。
  commons-logging对编程者和Log4j都非常友好。
  
  为了简化配置commons-logging,一般不使用commons-logging的配置文件,也不设置与commons-logging相关的系
统环境变量,而只需将Log4j的Jar包放置到classpash中就可以了。这样就很简单地完成了commons-logging与Log4j的融
合。如果不想用Log4j,只需将classpath中的Log4j的Jar包删除即可。
  而目前,apache通用日志工具commons-logging和Log4j已经成为Java日志的标准工具。
  二、commons-logging的主要api



  commons-logging的使用很简单,一般只要使用到两个接口:
   org.apache.commons.logging.Log
以及org.apache.commons.logging.LogFactory

  下面的语句就可以得到一个Log实例:

private   staticLog log=LogFactory.getLog(YouClassName. class );
  LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。
  一般常用的Log类的方法如下:

log.debug( "debug message" ); //输出调试级别的日志信息
log.info("info message"); //输出信息级别的日志信息
log.warn("warn message"); //输出警告级别的日志信息
log.warn("error message"); //输出错误级别的日志信息
log.fatal("fatal message");//输出致命错误级别的日志信息
   根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:
“调试(DEBUG)”<“信息(INFO)”<“警告(WARN)”<“错误(ERROR)”<“致命错误(FATAL)”

  

把日志信息分成不同的级别,是为了方便更好的控制它。
  比如,通过Log4j的配置文件,可以设置“输出‘调试’及以上级别的日志信
息”(即“调试”“信息”“警告”“错误”“致命错误”),这对项目开发人员可能是有用的;我们还可以设置“输出“警告”及以上级别的日志信息”(即“警
告”“错误”“致命错误”),这对项目最终用户可能是有用的。
  仅从字面上理解,也可以大致得出结论:最常用的应该是debug()和info();而warn()、error()、

fatal()仅在相应事件发生后才使用。
  上面所介绍的方法是目前被普通应用的,可以说是被标准化了的方法。
  commons-logging的详细javadoc请详见:http://commons.apache.org/logging/commons-logging-1.1.1/apidocs/index.html

  


  三、log4j和commons-logging结合


  log4j和commons-logging的结合很容易,在项目的classpath中加入log4j的jar包,同时在项目的文件中必须要有log4j.properties文件存在。这样在项目运行的时候,commons-logging会查找classpath中是否存在log4j的jar包,如果有,并且存在log4j.properties文件。则commons-logging会自动使用log4j来实现日志系统。
  log4j的简介及使用会在下一章中说明。
  注:本文参考了以下几篇网友的文章:
  http://www.blogjava.net/liuwentao253/archive/2006/08/03/61517.html

  http://lavasoft.blog.iyunv.com/62575/26134
页: [1]
查看完整版本: apache通用日志包commons-logging的简介以及与log4j的结合