首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Log4J源码分析(1)

2012-10-30 
Log4J源码分析(一)面对这近20000行代码,188个类,还真是有点不知从何下手。万事开头难嘛!既然使用Log4J是从C

Log4J源码分析(一)
面对这近20000行代码,188个类,还真是有点不知从何下手。万事开头难嘛!既然使用Log4J是从Category类开始的,那也从它开始分析。
  Category类位于org.apache.log4j包内,检查它的类层次图,它实现了AppenderAttachable接口。
  AppenderAttachable接口同样位于org.apache.log4j包内,查看它的源码,很明显,它可以被视为一个Appender的容器,所以Category类也可以当作是Appender的容器。
  但是,事情没这么简单,在Category类中有个私有域:
AppenderAttachableImpl aai
  AppenderAttachableImpl是什么?显然,从其名字可知,它是AppenderAttachable接口的一个实现。查看它的源码,它拥有一个私有域Vector appenderList,并在其上实现了AppenderAttachalbe接口。此外,AppenderAttachableImpl还添加了一个重要的方法:
/**
Call the doAppend method on all attached appenders. */
public
int appendLoopOnAppenders(LoggingEvent event) {
 int size = 0;
 Appender appender;

 if(appenderList != null) {
  size = appenderList.size();
  for(int i = 0; i < size; i++) {
   appender = (Appender) appenderList.elementAt(i);
   appender.doAppend(event);
  }
 }
 return size;
}
从这个方法的实现来看,它像是观察者(Observer)模式中的Notify方法。通过观察Appender的实现,可以肯定在这里使用了这模式,Appender做为AppenderAttachableImpl的观察者。

转载:http://jmut.bokee.com/

热点排行