[Commons Logging]使用一个抽象的Logging接口(From Jarkata Commons Cookbook 7.10)

[Commons Logging]使用一个抽象的Logging接口(From Jarkata Commons Cookbook 7.10)

   (Jarkata 的 Commons Logging 包现在已经被用在几乎所有的开源项目之中,它可以使你开发的系统工作在不同的日志框架下,包括Sun的logging框架和Apache Log4j。现在Commons Logging + Apache Log4j 的身影是随处可见,Commons Logging 的易用与Log4j的强大功能形成了绝配。)

问题:
      你正在写一个可重用的代码库,而你不知道你的代码在哪里并且是如何工作的。你需要一个抽象的日志接口来写入日志信息,因为你不能确定Log4j或者是JDK 1.4 logging的存在性。

解决:
        通过Jakarta Commons Logging 的Log 接口来记录信息,然后依靠Commons Logging自身来决定在运行时使用哪种具体的日志框架。下面的代码使用了Log接口来记录trace,debug,info,warning,error和fatal信息:
 1  import  org.apache.commons.logging.LogFactory;
 2  import  org.apache.commons.logging.Log
 3 
 4  Log log  =  LogFactory.getLog(  " com.discursive.jccook.SomeApp "  ); 
 5 
 6  if ( log.isTraceEnabled( ) ) {
 7      log.trace(  " This is a trace message "  );
 8  }
 9 
10  if ( log.isDebugEnabled( ) ) {
11      log.debug(  " This is a debug message "  );
12  }
13 
14  log.info(  " This is an informational message "  );
15 
16  log.warn(  " This is a warning "  );
17 
18  log.error(  " This is an error "  );
19 
20  log.fatal(  " This is fatal "  );
      LogFactory.getInstance() 返回一个Log接口的具体实现,这个实现与底层具体的日志框架相对应。例如,如果你的系统是使用Apache Log4j ,一个Log4JLogger将被返回,对应于Log4J category com.discursive.jccook.SomeApp 。

讨论:
        一个可重用代码库的开发者不能预知其代码库将在何时何地被用到,而现在有很多的日志框架可以使用,所以当开发可重用代码库的时候,使用Commons Logging 是非常明智的,例如Jakarta Commons 组件。当调用LogFactory.getInstance()方法的时候,Commons Logging 将通过系统属性和classpath中的类库来决定和管理适当的日志框架。对于一个小型可重用组件的开发者来说,进行日志记录只需要调用Log接口。而配置底层日志框架的负担,就转移到使用其组件库的开发者身上。

参考:
        7.11节详细的说明了Commons Logging在运行时确定适当日志框架的算法。

    

你可能感兴趣的:([Commons Logging]使用一个抽象的Logging接口(From Jarkata Commons Cookbook 7.10))