亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? domconfigurator.java

?? log4j的源碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright 1999-2005 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.log4j.xml;import java.util.*;import java.net.URL;import org.w3c.dom.*;import java.lang.reflect.Method;import org.apache.log4j.*;import org.apache.log4j.spi.*;import org.apache.log4j.or.RendererMap;import org.apache.log4j.helpers.*;import org.apache.log4j.config.PropertySetter;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import java.io.File;import java.io.InputStream;import java.io.Reader;import java.io.IOException;import java.net.URL;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.FactoryConfigurationError;// Contributors:   Mark Womack//                 Arun Katkere /**   Use this class to initialize the log4j environment using a DOM tree.   <p>The DTD is specified in <a   href="log4j.dtd"><b>log4j.dtd</b></a>.   <p>Sometimes it is useful to see how log4j is reading configuration   files. You can enable log4j internal logging by defining the   <b>log4j.debug</b> variable on the java command   line. Alternatively, set the <code>debug</code> attribute in the   <code>log4j:configuration</code> element. As in<pre>   &lt;log4j:configuration <b>debug="true"</b> xmlns:log4j="http://jakarta.apache.org/log4j/">   ...   &lt;/log4j:configuration></pre>   <p>There are sample XML files included in the package.      @author Christopher Taylor   @author Ceki G&uuml;lc&uuml;   @author Anders Kristensen   @since 0.8.3 */public class DOMConfigurator implements Configurator {  static final String CONFIGURATION_TAG = "log4j:configuration";  static final String OLD_CONFIGURATION_TAG = "configuration";  static final String RENDERER_TAG      = "renderer";  static final String APPENDER_TAG 	= "appender";  static final String APPENDER_REF_TAG 	= "appender-ref";    static final String PARAM_TAG    	= "param";  static final String LAYOUT_TAG	= "layout";  static final String CATEGORY		= "category";  static final String LOGGER		= "logger";  static final String LOGGER_REF	= "logger-ref";  static final String CATEGORY_FACTORY_TAG  = "categoryFactory";  static final String NAME_ATTR		= "name";  static final String CLASS_ATTR        = "class";  static final String VALUE_ATTR	= "value";  static final String ROOT_TAG		= "root";  static final String ROOT_REF		= "root-ref";  static final String LEVEL_TAG	        = "level";  static final String PRIORITY_TAG      = "priority";  static final String FILTER_TAG	= "filter";  static final String ERROR_HANDLER_TAG	= "errorHandler";  static final String REF_ATTR		= "ref";  static final String ADDITIVITY_ATTR    = "additivity";    static final String THRESHOLD_ATTR       = "threshold";  static final String CONFIG_DEBUG_ATTR  = "configDebug";  static final String INTERNAL_DEBUG_ATTR  = "debug";  static final String RENDERING_CLASS_ATTR = "renderingClass";  static final String RENDERED_CLASS_ATTR = "renderedClass";  static final String EMPTY_STR = "";  static final Class[] ONE_STRING_PARAM = new Class[] {String.class};  final static String dbfKey = "javax.xml.parsers.DocumentBuilderFactory";    // key: appenderName, value: appender  Hashtable appenderBag;  Properties props;  LoggerRepository repository;  /**     No argument constructor.  */  public  DOMConfigurator () {     appenderBag = new Hashtable();  }  /**     Used internally to parse appenders by IDREF name.  */  protected  Appender findAppenderByName(Document doc, String appenderName)  {          Appender appender = (Appender) appenderBag.get(appenderName);    if(appender != null) {      return appender;    } else {      // Doesn't work on DOM Level 1 :      // Element element = doc.getElementById(appenderName);                              // Endre's hack:      Element element = null;      NodeList list = doc.getElementsByTagName("appender");      for (int t=0; t < list.getLength(); t++) {	Node node = list.item(t);	NamedNodeMap map= node.getAttributes();	Node attrNode = map.getNamedItem("name");	if (appenderName.equals(attrNode.getNodeValue())) {	  element = (Element) node;	  break;	}      }      // Hack finished.      if(element == null) {	LogLog.error("No appender named ["+appenderName+"] could be found."); 	return null;      } else {	appender = parseAppender(element);	appenderBag.put(appenderName, appender);	return appender;      }    }   }  /**     Used internally to parse appenders by IDREF element.   */  protected  Appender findAppenderByReference(Element appenderRef) {        String appenderName = subst(appenderRef.getAttribute(REF_ATTR));        Document doc = appenderRef.getOwnerDocument();    return findAppenderByName(doc, appenderName);  }  /**     Used internally to parse an appender element.   */  protected  Appender parseAppender (Element appenderElement) {    String className = subst(appenderElement.getAttribute(CLASS_ATTR));    LogLog.debug("Class name: [" + className+']');        try {      Object instance 	= Loader.loadClass(className).newInstance();      Appender appender	= (Appender)instance;      PropertySetter propSetter = new PropertySetter(appender);      appender.setName(subst(appenderElement.getAttribute(NAME_ATTR)));            NodeList children	= appenderElement.getChildNodes();      final int length 	= children.getLength();      for (int loop = 0; loop < length; loop++) {	Node currentNode = children.item(loop);	/* We're only interested in Elements */	if (currentNode.getNodeType() == Node.ELEMENT_NODE) {	  Element currentElement = (Element)currentNode;	  // Parse appender parameters 	  if (currentElement.getTagName().equals(PARAM_TAG)) {            setParameter(currentElement, propSetter);	  }	  // Set appender layout	  else if (currentElement.getTagName().equals(LAYOUT_TAG)) {	    appender.setLayout(parseLayout(currentElement));	  }	  // Add filters	  else if (currentElement.getTagName().equals(FILTER_TAG)) {	    parseFilters(currentElement, appender);	  }	  else if (currentElement.getTagName().equals(ERROR_HANDLER_TAG)) {	    parseErrorHandler(currentElement, appender);	  }	  else if (currentElement.getTagName().equals(APPENDER_REF_TAG)) {	    String refName = subst(currentElement.getAttribute(REF_ATTR));	    if(appender instanceof AppenderAttachable) {	      AppenderAttachable aa = (AppenderAttachable) appender;	      LogLog.debug("Attaching appender named ["+ refName+			   "] to appender named ["+ appender.getName()+"].");	      aa.addAppender(findAppenderByReference(currentElement));	    } else {	      LogLog.error("Requesting attachment of appender named ["+			   refName+ "] to appender named ["+ appender.getName()+                "] which does not implement org.apache.log4j.spi.AppenderAttachable.");	    }	  }	}      }      propSetter.activate();      return appender;    }    /* Yes, it's ugly.  But all of these exceptions point to the same       problem: we can't create an Appender */    catch (Exception oops) {      LogLog.error("Could not create an Appender. Reported error follows.",		   oops);      return null;    }  }  /**     Used internally to parse an {@link ErrorHandler} element.   */  protected  void parseErrorHandler(Element element, Appender appender) {    ErrorHandler eh = (ErrorHandler) OptionConverter.instantiateByClassName(                                       subst(element.getAttribute(CLASS_ATTR)),                                       org.apache.log4j.spi.ErrorHandler.class,  				       null);        if(eh != null) {      eh.setAppender(appender);      PropertySetter propSetter = new PropertySetter(eh);      NodeList children = element.getChildNodes();      final int length 	= children.getLength();      for (int loop = 0; loop < length; loop++) {	Node currentNode = children.item(loop);	if (currentNode.getNodeType() == Node.ELEMENT_NODE) {	  Element currentElement = (Element) currentNode;	  String tagName = currentElement.getTagName();	  if(tagName.equals(PARAM_TAG)) {            setParameter(currentElement, propSetter);	  } else if(tagName.equals(APPENDER_REF_TAG)) {	    eh.setBackupAppender(findAppenderByReference(currentElement));	  } else if(tagName.equals(LOGGER_REF)) {	    String loggerName = currentElement.getAttribute(REF_ATTR);	    	    Logger logger = repository.getLogger(loggerName);	    eh.setLogger(logger);	  } else if(tagName.equals(ROOT_REF)) {	    Logger root = repository.getRootLogger();	    eh.setLogger(root);	  }	}      }      propSetter.activate();      appender.setErrorHandler(eh);    }  }    /**     Used internally to parse a filter element.   */  protected  void parseFilters(Element element, Appender appender) {    String clazz = subst(element.getAttribute(CLASS_ATTR));    Filter filter = (Filter) OptionConverter.instantiateByClassName(clazz,                                                Filter.class, null);        if(filter != null) {      PropertySetter propSetter = new PropertySetter(filter);      NodeList children = element.getChildNodes();      final int length 	= children.getLength();      for (int loop = 0; loop < length; loop++) {	Node currentNode = children.item(loop);	if (currentNode.getNodeType() == Node.ELEMENT_NODE) {	  Element currentElement = (Element) currentNode;	  String tagName = currentElement.getTagName();	  if(tagName.equals(PARAM_TAG)) {            setParameter(currentElement, propSetter);	  } 	}      }      propSetter.activate();      LogLog.debug("Adding filter of type ["+filter.getClass()		   +"] to appender named ["+appender.getName()+"].");      appender.addFilter(filter);    }      }    /**     Used internally to parse an category element.  */  protected  void parseCategory (Element loggerElement) {    // Create a new org.apache.log4j.Category object from the <category> element.    String catName = subst(loggerElement.getAttribute(NAME_ATTR));    Logger cat;        String className = subst(loggerElement.getAttribute(CLASS_ATTR));    if(EMPTY_STR.equals(className)) {      LogLog.debug("Retreiving an instance of org.apache.log4j.Logger.");      cat = repository.getLogger(catName);    }    else {      LogLog.debug("Desired logger sub-class: ["+className+']');       try {	 	 Class clazz = Loader.loadClass(className);	 Method getInstanceMethod = clazz.getMethod("getLogger", 						    ONE_STRING_PARAM);	 cat = (Logger) getInstanceMethod.invoke(null, new Object[] {catName});       } catch (Exception oops) {	 LogLog.error("Could not retrieve category ["+catName+		      "]. Reported error follows.", oops);	 return;       }    }    // Setting up a category needs to be an atomic operation, in order    // to protect potential log operations while category    // configuration is in progress.    synchronized(cat) {      boolean additivity = OptionConverter.toBoolean(                           subst(loggerElement.getAttribute(ADDITIVITY_ATTR)),			   true);          LogLog.debug("Setting ["+cat.getName()+"] additivity to ["+additivity+"].");      cat.setAdditivity(additivity);      parseChildrenOfLoggerElement(loggerElement, cat, false);    }  }  /**     Used internally to parse the category factory element.  */  protected  void parseCategoryFactory(Element factoryElement) {    String className = subst(factoryElement.getAttribute(CLASS_ATTR));    if(EMPTY_STR.equals(className)) {      LogLog.error("Category Factory tag " + CLASS_ATTR + " attribute not found.");      LogLog.debug("No Category Factory configured.");    }    else {      LogLog.debug("Desired category factory: ["+className+']');      Object catFactory = OptionConverter.instantiateByClassName(className,                                                                  LoggerFactory.class,                                                                  null);      PropertySetter propSetter = new PropertySetter(catFactory);      Element  currentElement = null;      Node     currentNode    = null;      NodeList children       = factoryElement.getChildNodes();      final int length        = children.getLength();      for (int loop=0; loop < length; loop++) {        currentNode = children.item(loop);	if (currentNode.getNodeType() == Node.ELEMENT_NODE) {	  currentElement = (Element)currentNode;	  if (currentElement.getTagName().equals(PARAM_TAG)) {	    setParameter(currentElement, propSetter);	  }	}      }    }  }  /**     Used internally to parse the roor category element.  */  protected  void parseRoot (Element rootElement) {    Logger root = repository.getRootLogger();    // category configuration needs to be atomic    synchronized(root) {          parseChildrenOfLoggerElement(rootElement, root, true);    }  }  /**     Used internally to parse the children of a category element.  */  protected  void parseChildrenOfLoggerElement(Element catElement,				      Logger cat, boolean isRoot) {        PropertySetter propSetter = new PropertySetter(cat);        // Remove all existing appenders from cat. They will be    // reconstructed if need be.    cat.removeAllAppenders();    NodeList children 	= catElement.getChildNodes();    final int length 	= children.getLength();        for (int loop = 0; loop < length; loop++) {      Node currentNode = children.item(loop);      if (currentNode.getNodeType() == Node.ELEMENT_NODE) {	Element currentElement = (Element) currentNode;	String tagName = currentElement.getTagName();		if (tagName.equals(APPENDER_REF_TAG)) {	  Element appenderRef = (Element) currentNode;	  Appender appender = findAppenderByReference(appenderRef);	  String refName =  subst(appenderRef.getAttribute(REF_ATTR));	  if(appender != null)	    LogLog.debug("Adding appender named ["+ refName+ 			 "] to category ["+cat.getName()+"].");	  else 	    LogLog.debug("Appender named ["+ refName + "] not found.");	    	  cat.addAppender(appender);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片一区二区| 久久99精品久久久久久动态图| 91免费视频网址| 日韩高清在线观看| 国产精品国产三级国产三级人妇| 在线这里只有精品| 欧美日韩视频在线一区二区| 精品一区二区日韩| 亚洲成人在线观看视频| 久久免费电影网| 日韩一区二区精品葵司在线 | 久久国产三级精品| 亚洲欧美一区二区久久 | 欧美午夜精品免费| 激情图区综合网| 性做久久久久久免费观看| 国产精品白丝在线| 欧美国产精品中文字幕| 久久久久久日产精品| 日韩欧美一级二级三级久久久| 成人h动漫精品一区二区 | 亚洲三级免费观看| 日本一区二区免费在线观看视频| 欧美三级一区二区| 欧美亚洲综合一区| 一本大道av伊人久久综合| 国产精品18久久久久久久久久久久 | 粗大黑人巨茎大战欧美成人| 视频一区二区中文字幕| 国产精品国产三级国产三级人妇 | 51午夜精品国产| 精品婷婷伊人一区三区三| 在线视频综合导航| 欧美精品99久久久**| 欧美精品一卡两卡| 欧美一级片在线看| 在线不卡a资源高清| 精品噜噜噜噜久久久久久久久试看| 91精品国产一区二区人妖| 日韩欧美成人一区| 久久天天做天天爱综合色| 国产精品乱码久久久久久| 中文字幕一区二区三区蜜月| 亚洲日本一区二区三区| 肉色丝袜一区二区| 国产精品18久久久久久久网站| 99久久久国产精品| 欧美夫妻性生活| 国产精品久久久久一区二区三区共| 亚洲激情图片小说视频| 一区二区三区日韩精品| 久久国产精品无码网站| 成人av午夜电影| 日韩三级伦理片妻子的秘密按摩| 国产网站一区二区三区| 日韩综合小视频| 91一区二区三区在线观看| 日韩午夜在线播放| 亚洲免费电影在线| 国产乱一区二区| 欧美一区二区高清| 性做久久久久久免费观看欧美| 高清国产午夜精品久久久久久| 成人涩涩免费视频| 国产一区不卡在线| 欧美高清视频在线高清观看mv色露露十八 | 日韩avvvv在线播放| 国产永久精品大片wwwapp| 欧美在线免费观看亚洲| 欧美国产成人精品| 丁香亚洲综合激情啪啪综合| 欧美一区二区三区在线观看视频 | 国产一区二区免费看| 色偷偷久久一区二区三区| 国产日韩欧美综合一区| 国内久久婷婷综合| 精品国产凹凸成av人导航| 青青国产91久久久久久| 欧美伦理电影网| 亚洲午夜电影网| 欧美人成免费网站| 免费观看一级特黄欧美大片| 91精品欧美综合在线观看最新| 一区二区三区在线观看视频| 91在线免费看| 亚洲精品写真福利| 欧美精品电影在线播放| 五月天中文字幕一区二区| 欧美日韩成人一区| 精品一区二区三区日韩| 久久久久久影视| 国产另类ts人妖一区二区| 久久久久久久久久久久电影| 高清久久久久久| 亚洲国产日韩av| 精品国产露脸精彩对白| 大桥未久av一区二区三区中文| 国产精品萝li| 日韩视频123| 99国产精品久久久久| 日本最新不卡在线| 国产欧美日本一区视频| 欧美制服丝袜第一页| 国产在线乱码一区二区三区| 久久精品一区蜜桃臀影院| 欧美中文字幕亚洲一区二区va在线| 日韩国产精品久久| 亚洲国产精品v| 91精品中文字幕一区二区三区| 精品一区二区三区久久| 亚洲欧美综合网| 久久久影视传媒| 精品欧美乱码久久久久久1区2区| 91在线一区二区| 国产精品一区免费在线观看| 亚洲福利电影网| 亚洲黄网站在线观看| 国产视频在线观看一区二区三区| 在线播放亚洲一区| 色综合天天综合狠狠| 不卡免费追剧大全电视剧网站| 久久精品国产亚洲aⅴ| 日韩国产欧美在线观看| 午夜精品一区二区三区免费视频 | 久久婷婷一区二区三区| 欧美大片一区二区三区| 欧美变态凌虐bdsm| 久久亚洲综合色| 久久久精品国产免大香伊| 久久久精品影视| 中文字幕乱码亚洲精品一区| 久久久精品中文字幕麻豆发布| 久久女同精品一区二区| 久久精品网站免费观看| 欧美高清在线一区二区| 国产精品国产a级| 亚洲综合一二区| 麻豆精品一二三| 国产成人精品影视| 99国产麻豆精品| 69堂亚洲精品首页| 精品久久久久一区二区国产| 精品久久久久久久久久久久包黑料| 欧美精品一区二区三区蜜桃| 久久久99精品免费观看| 国产精品久久久久久福利一牛影视 | 99久久er热在这里只有精品15| 91啪亚洲精品| 日韩一区二区视频在线观看| 久久精品亚洲精品国产欧美kt∨| 欧美激情综合五月色丁香小说| 亚洲啪啪综合av一区二区三区| 亚洲不卡av一区二区三区| 激情综合网av| 日本韩国视频一区二区| 337p日本欧洲亚洲大胆精品| 国产精品你懂的| 日韩不卡一区二区三区| 99亚偷拍自图区亚洲| 日韩欧美123| 亚洲v中文字幕| www.在线成人| 久久久噜噜噜久久人人看| 亚洲成av人综合在线观看| 国产成人午夜精品影院观看视频| 欧洲一区在线电影| 亚洲欧美日韩系列| 不卡的电视剧免费网站有什么| 日韩一本二本av| 天堂资源在线中文精品| 色先锋aa成人| 亚洲一区二区美女| a在线欧美一区| 中文字幕 久热精品 视频在线 | 国产99精品视频| 精品国产乱码久久久久久久久| 午夜精品久久久久影视| 欧美亚洲一区三区| 艳妇臀荡乳欲伦亚洲一区| 色乱码一区二区三区88 | 国产色一区二区| 国产91高潮流白浆在线麻豆| 日韩欧美高清一区| 国产一区二区不卡老阿姨| 精品国产麻豆免费人成网站| 老司机精品视频导航| 久久综合成人精品亚洲另类欧美| 麻豆一区二区三区| 国产午夜精品一区二区三区嫩草| 国产精品77777| 亚洲三级在线播放| 欧美偷拍一区二区| 另类欧美日韩国产在线| 精品国产91亚洲一区二区三区婷婷 | 91首页免费视频| 亚洲精品乱码久久久久久 | 欧美裸体bbwbbwbbw| 国产又黄又大久久| 中文字幕一区二区三区不卡在线| 欧美最猛性xxxxx直播|