欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Log4J源码分析(一)

程序员文章站 2022-07-05 09:48:49
...
面对这近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/
相关标签: log4j Apache