深入Log4J源码之LoggerRepository和Configurator(七)

2014-11-24 08:39:23 · 作者: · 浏览: 3
t.class, null);
22 if (layout != null) {
23 appender.setLayout(layout);
24 LogLog.debug("Parsing layout options for \"" + appenderName
25 + "\".");
26 PropertySetter.setProperties(layout, props, layoutPrefix
27 + ".");
28 LogLog.debug("End of parsing for \"" + appenderName + "\".");
29 }
30 }
31 final String errorHandlerPrefix = prefix + ".errorhandler";
32 String errorHandlerClass = OptionConverter.findAndSubst(
33 errorHandlerPrefix, props);
34 if (errorHandlerClass != null) {
35 ErrorHandler eh = (ErrorHandler) OptionConverter
36 .instantiateByKey(props, errorHandlerPrefix,
37 ErrorHandler.class, null);
38 if (eh != null) {
39 appender.setErrorHandler(eh);
40 LogLog.debug("Parsing errorhandler options for \""
41 + appenderName + "\".");
42 parseErrorHandler(eh, errorHandlerPrefix, props, repository);
43 final Properties edited = new Properties();
44 final String[] keys = new String[] {
45 errorHandlerPrefix + "." + ROOT_REF,
46 errorHandlerPrefix + "." + LOGGER_REF,
47 errorHandlerPrefix + "." + APPENDER_REF_TAG };
48 for (Iterator iter = props.entrySet().iterator(); iter
49 .hasNext();) {
50 Map.Entry entry = (Map.Entry) iter.next();
51 int i = 0;
52 for (; i < keys.length; i++) {
53 if (keys[i].equals(entry.getKey()))
54 break;
55 }
56 if (i == keys.length) {
57 edited.put(entry.getKey(), entry.getValue());
58 }
59 }
60 PropertySetter.setProperties(eh, edited, errorHandlerPrefix
61 + ".");
62 LogLog.debug("End of errorhandler parsing for \""
63 + appenderName + "\".");
64 }
65 }
66 PropertySetter.setProperties(appender, props, prefix + ".");
67 LogLog.debug("Parsed \"" + appenderName + "\" options.");
68 }
69 parseAppenderFilters(props, appenderName, appender);
70 registryPut(appender);
71 return appender;
72 }
2. 解析LoggerFactory配置

查找log4j.loggerFactory的值,保存创建的LoggerFactory实例,使用log4j.loggerFactory.propName的方式设置LoggerFactory实例的属性。

1 protected void configureLoggerFactory(Properties props) {
2 String factoryClassName = OptionConverter.findAndSubst(
3 LOGGER_FACTORY_KEY, props);
4 if (factoryClassName != null) {
5 LogLog.debug("Setting category factory to [" + factoryClassName
6 + "].");
7 loggerFactory = (LoggerFactory) OptionConverter
8 .instantiateByClassName(factoryClassName,
9 LoggerFactory.class, loggerFactory);
10 PropertySetter.setProperties(loggerFactory, props, FACTORY_PREFIX
11 + ".");
12 }
13 }
3.