guangnian0412's BLOG

Java in my life

常用链接

统计

积分与排名

我关注的Blog

最新评论

[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在运行时确定适当日志框架的算法。

    

posted on 2006-04-24 18:32 guangnian 阅读(800) 评论(0)  编辑  收藏 所属分类: Jakarta Commons


只有注册用户登录后才能发表评论。


网站导航: