⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 domconfigurator.java

📁 apache的log4j源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    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);	  } else {            quietParseUnrecognizedElement(filter, currentElement, props);      }	}      }      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 = (catFactory == null) ? repository.getLogger(catName) : repository.getLogger(catName, catFactory);    }    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 factory = OptionConverter.instantiateByClassName(className,                                                                 LoggerFactory.class,                                                                  null);      if (factory instanceof LoggerFactory) {          catFactory = (LoggerFactory) factory;      } else {          LogLog.error("Category Factory class " + className + " does not implement org.apache.log4j.LoggerFactory");      }      PropertySetter propSetter = new PropertySetter(factory);      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);	  } else {           quietParseUnrecognizedElement(factory, currentElement, props);      }	}      }    }  }  /**     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);	  	} else if(tagName.equals(LEVEL_TAG)) {	  parseLevel(currentElement, cat, isRoot);		} else if(tagName.equals(PRIORITY_TAG)) {	  parseLevel(currentElement, cat, isRoot);	} else if(tagName.equals(PARAM_TAG)) {          setParameter(currentElement, propSetter);	} else {        quietParseUnrecognizedElement(cat, currentElement, props);    }      }    }    propSetter.activate();  }  /**     Used internally to parse a layout element.  */    protected  Layout parseLayout (Element layout_element) {    String className = subst(layout_element.getAttribute(CLASS_ATTR));    LogLog.debug("Parsing layout of class: \""+className+"\"");		     try {      Object instance 	= Loader.loadClass(className).newInstance();      Layout layout   	= (Layout)instance;      PropertySetter propSetter = new PropertySetter(layout);            NodeList params 	= layout_element.getChildNodes();      final int length 	= params.getLength();      for (int loop = 0; loop < length; loop++) {	Node currentNode = (Node)params.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 {          parseUnrecognizedElement(instance, currentElement, props);      }	}      }            propSetter.activate();      return layout;    }    catch (Exception oops) {      LogLog.error("Could not create the Layout. Reported error follows.",		   oops);      return null;    }  }  protected   void parseRenderer(Element element) {    String renderingClass = subst(element.getAttribute(RENDERING_CLASS_ATTR));    String renderedClass = subst(element.getAttribute(RENDERED_CLASS_ATTR));    if(repository instanceof RendererSupport) {      RendererMap.addRenderer((RendererSupport) repository, renderedClass, 			      renderingClass);    }  }  /**     Used internally to parse a level  element.  */  protected  void parseLevel(Element element, Logger logger, boolean isRoot) {    String catName = logger.getName();    if(isRoot) {      catName = "root";    }    String priStr = subst(element.getAttribute(VALUE_ATTR));    LogLog.debug("Level value for "+catName+" is  ["+priStr+"].");        if(INHERITED.equalsIgnoreCase(priStr) || NULL.equalsIgnoreCase(priStr)) {      if(isRoot) {	LogLog.error("Root level cannot be inherited. Ignoring directive.");      } else {	logger.setLevel(null);      }    } else {      String className = subst(element.getAttribute(CLASS_ATTR));            if(EMPTY_STR.equals(className)) {		logger.setLevel(OptionConverter.toLevel(priStr, Level.DEBUG));      } else {	LogLog.debug("Desired Level sub-class: ["+className+']');	try {	 	  Class clazz = Loader.loadClass(className);	  Method toLevelMethod = clazz.getMethod("toLevel", 						    ONE_STRING_PARAM);	  Level pri = (Level) toLevelMethod.invoke(null, 						    new Object[] {priStr});	  logger.setLevel(pri);	} catch (Exception oops) {	  LogLog.error("Could not create level ["+priStr+		       "]. Reported error follows.", oops);	  return;	}      }    }    LogLog.debug(catName + " level set to " + logger.getLevel());      }  protected  void setParameter(Element elem, PropertySetter propSetter) {      setParameter(elem, propSetter, props);  }  /**     Configure log4j using a <code>configuration</code> element as     defined in the log4j.dtd.   */  static  public  void configure (Element element) {    DOMConfigurator configurator = new DOMConfigurator();    configurator.doConfigure(element,  LogManager.getLoggerRepository());  } /**     Like {@link #configureAndWatch(String, long)} except that the     default delay as defined by {@link FileWatchdog#DEFAULT_DELAY} is     used.      @param configFilename A log4j configuration file in XML format.  */  static  public  void configureAndWatch(String configFilename) {    configureAndWatch(configFilename, FileWatchdog.DEFAULT_DELAY);  }  /**     Read the configuration file <code>configFilename</code> if it     exists. Moreover, a thread will be created that will periodically     check if <code>configFilename</code> has been created or     modified. The period is determined by the <code>delay</code>     argument. If a change or file creation is detected, then     <code>configFilename</code> is read to configure log4j.        @param configFilename A log4j configuration file in XML format.      @param delay The delay in milliseconds to wait between each check.  */  static  public  void configureAndWatch(String configFilename, long delay) {    XMLWatchdog xdog = new XMLWatchdog(configFilename);    xdog.setDelay(delay);    xdog.start();  }    private interface ParseAction {      Document parse(final DocumentBuilder parser) throws SAXException, IOException;  }  public  void doConfigure(final String filename, LoggerRepository repository) {    ParseAction action = new ParseAction() {          public Document parse(final DocumentBuilder parser) throws SAXException, IOException {              return parser.parse(new File(filename));          }          public String toString() {               return "file [" + filename + "]";           }    };    doConfigure(action, repository);  }    public  void doConfigure(final URL url, LoggerRepository repository) {      ParseAction action = new ParseAction() {          public Document parse(final DocumentBuilder parser) throws SAXException, IOException {              return parser.parse(url.toString());          }          public String toString() { 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -