Log4J源码分析(四)
程序员文章站
2022-07-05 09:19:02
...
转载:http://jmut.bokee.com/
现在初始化进入到了最重要的阶段。我们先看看最常用的PropertyConfigurator,它从一个外部文件中读取配置。这个类最重要的方法当然是几个doConfigure方法。其中最复杂的是:
public
void doConfigure(Properties properties, LoggerRepository hierarchy)
它是接口Configurator中的方法。
1、由键log4j.debug设定内部debug信息是否输出;
2、由键log4j.thredsold设定全局level,它的value中可以使用变量,所以要进行变量替换,可以参见OptionConverter的
public
static
String findAndSubst(String key, Properties props)
和
public static
String substVars(String val, Properties props) throws
IllegalArgumentException
方法的说明。
3、由键log4j.rootLogger或log4j.rootCategory设置根配置。方法:
void parseCategory(Properties props, Logger logger, String optionKey,
String loggerName, String value)
处理设置语法:
log4j.rootLogger=[level], appenderName, appenderName, ...
root logger的level不能是inherited或null。方法:
Appender parseAppender(Properties props, String appenderName)
设置各个appender,它使用域
protected Hashtable registry = new Hashtable(11);
跟踪当前文件中的appender。在这个方法中使用了工具类PropertySetter。
4、由键log4j.loggerFactory配置LoggerFactory。同样使用了工具类PropertySetter。
5、由log4j.logger或log4j.category配置非根logger。
6、清空registry。
PropertySetter是一个重要的类,它通过JavaBean使用了reflection。它不设置appender的layout。
至此,初始化工作完成。整个初始化是围绕一个配置文件来做的,但中心是由这个文件得来的Properties对象,所以这个文件可以有多种形式,甚至可以是其它的载体,不必是文件,关键是能得到一个Properties对象。然后根据Properties对象中的信息生成、配置和组织logger。由于支持使用变量,所以在由key获取value时,要用到工具方法,实现变量的替换。现在生成和配置的问题已经解决,剩下的是logger的组织,它是在Hierarchy中解决的。
转载:http://jmut.bokee.com/
现在初始化进入到了最重要的阶段。我们先看看最常用的PropertyConfigurator,它从一个外部文件中读取配置。这个类最重要的方法当然是几个doConfigure方法。其中最复杂的是:
public
void doConfigure(Properties properties, LoggerRepository hierarchy)
它是接口Configurator中的方法。
1、由键log4j.debug设定内部debug信息是否输出;
2、由键log4j.thredsold设定全局level,它的value中可以使用变量,所以要进行变量替换,可以参见OptionConverter的
public
static
String findAndSubst(String key, Properties props)
和
public static
String substVars(String val, Properties props) throws
IllegalArgumentException
方法的说明。
3、由键log4j.rootLogger或log4j.rootCategory设置根配置。方法:
void parseCategory(Properties props, Logger logger, String optionKey,
String loggerName, String value)
处理设置语法:
log4j.rootLogger=[level], appenderName, appenderName, ...
root logger的level不能是inherited或null。方法:
Appender parseAppender(Properties props, String appenderName)
设置各个appender,它使用域
protected Hashtable registry = new Hashtable(11);
跟踪当前文件中的appender。在这个方法中使用了工具类PropertySetter。
4、由键log4j.loggerFactory配置LoggerFactory。同样使用了工具类PropertySetter。
5、由log4j.logger或log4j.category配置非根logger。
6、清空registry。
PropertySetter是一个重要的类,它通过JavaBean使用了reflection。它不设置appender的layout。
至此,初始化工作完成。整个初始化是围绕一个配置文件来做的,但中心是由这个文件得来的Properties对象,所以这个文件可以有多种形式,甚至可以是其它的载体,不必是文件,关键是能得到一个Properties对象。然后根据Properties对象中的信息生成、配置和组织logger。由于支持使用变量,所以在由key获取value时,要用到工具方法,实现变量的替换。现在生成和配置的问题已经解决,剩下的是logger的组织,它是在Hierarchy中解决的。
转载:http://jmut.bokee.com/