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

📄 domconfigurator.java

📁 实现在电脑平台上控制短信modem或手机进行通讯的jar包和相关实例
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	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);	}      }    }    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);	  }	}      }            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) {    String name = subst(elem.getAttribute(NAME_ATTR));    String value = (elem.getAttribute(VALUE_ATTR));    value = subst(OptionConverter.convertSpecialChars(value));    propSetter.setProperty(name, value);  }  /**     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();  }  public  void doConfigure(String filename, LoggerRepository repository) {    FileInputStream fis = null;    try {      fis = new FileInputStream(filename);      doConfigure(fis, repository);    } catch(IOException e) {      LogLog.error("Could not open ["+filename+"].", e);    } finally {      if (fis != null) {	try {	  fis.close();	} catch(java.io.IOException e) {	  LogLog.error("Could not close ["+filename+"].", e);	}      }    }  }    public  void doConfigure(URL url, LoggerRepository repository) {    try {      doConfigure(url.openStream(), repository);    } catch(IOException e) {      LogLog.error("Could not open ["+url+"].", e);    }  }  /**     Configure log4j by reading in a log4j.dtd compliant XML     configuration file.  */  public  void doConfigure(InputStream inputStream, LoggerRepository repository)                                           throws FactoryConfigurationError {    doConfigure(new InputSource(inputStream), repository);  }  /**     Configure log4j by reading in a log4j.dtd compliant XML     configuration file.  */  public  void doConfigure(Reader reader, LoggerRepository repository)                                           throws FactoryConfigurationError {    doConfigure(new InputSource(reader), repository);  }  /**     Configure log4j by reading in a log4j.dtd compliant XML     configuration file.  */  protected  void doConfigure(InputSource inputSource, LoggerRepository repository)                                           throws FactoryConfigurationError {    DocumentBuilderFactory dbf = null;    this.repository = repository;    try {       LogLog.debug("System property is :"+  	                        OptionConverter.getSystemProperty(dbfKey, 								  null));       dbf = DocumentBuilderFactory.newInstance();      LogLog.debug("Standard DocumentBuilderFactory search succeded.");      LogLog.debug("DocumentBuilderFactory is: "+dbf.getClass().getName());    } catch(FactoryConfigurationError fce) {      Exception e = fce.getException();      LogLog.debug("Could not instantiate a DocumentBuilderFactory.", e);      throw fce;    }          try {      dbf.setValidating(true);      DocumentBuilder docBuilder = dbf.newDocumentBuilder();      docBuilder.setErrorHandler(new SAXErrorHandler());            docBuilder.setEntityResolver(new Log4jEntityResolver());              // we change the system ID to a valid URI so that Crimson won't      // complain. Indeed, "log4j.dtd" alone is not a valid URI which      // causes Crimson to barf. The Log4jEntityResolver only cares      // about the "log4j.dtd" ending.      inputSource.setSystemId("dummy://log4j.dtd");      Document doc = docBuilder.parse(inputSource);       parse(doc.getDocumentElement());    } catch (Exception e) {      // I know this is miserable...      LogLog.error("Could not parse input source ["+inputSource+"].", e);    }  }  /**     Configure by taking in an DOM element.   */  public void doConfigure(Element element, LoggerRepository repository) {    this.repository = repository;    parse(element);  }    /**     A static version of {@link #doConfigure(String, LoggerRepository)}.  */  static  public  void configure(String filename) throws FactoryConfigurationError {    new DOMConfigurator().doConfigure(filename, 				      LogManager.getLoggerRepository());  }  /**     A static version of {@link #doConfigure(URL, LoggerRepository)}.   */  static  public  void configure(URL url) throws FactoryConfigurationError {    new DOMConfigurator().doConfigure(url, LogManager.getLoggerRepository());  }  /**     Used internally to configure the log4j framework by parsing a DOM     tree of XML elements based on <a     href="doc-files/log4j.dtd">log4j.dtd</a>.       */  protected  void parse(Element element) {    String rootElementName = element.getTagName();    if (!rootElementName.equals(CONFIGURATION_TAG)) {      if(rootElementName.equals(OLD_CONFIGURATION_TAG)) {	LogLog.warn("The <"+OLD_CONFIGURATION_TAG+		     "> element has been deprecated.");	LogLog.warn("Use the <"+CONFIGURATION_TAG+"> element instead.");      } else {	LogLog.error("DOM element is - not a <"+CONFIGURATION_TAG+"> element.");	return;      }    }    String debugAttrib = subst(element.getAttribute(INTERNAL_DEBUG_ATTR));          LogLog.debug("debug attribute= \"" + debugAttrib +"\".");    // if the log4j.dtd is not specified in the XML file, then the    // "debug" attribute is returned as the empty string.    if(!debugAttrib.equals("") && !debugAttrib.equals("null")) {            LogLog.setInternalDebugging(OptionConverter.toBoolean(debugAttrib, true));    } else {      LogLog.debug("Ignoring " + INTERNAL_DEBUG_ATTR + " attribute.");    }    String confDebug = subst(element.getAttribute(CONFIG_DEBUG_ATTR));    if(!confDebug.equals("") && !confDebug.equals("null")) {            LogLog.warn("The \""+CONFIG_DEBUG_ATTR+"\" attribute is deprecated.");      LogLog.warn("Use the \""+INTERNAL_DEBUG_ATTR+"\" attribute instead.");      LogLog.setInternalDebugging(OptionConverter.toBoolean(confDebug, true));    }    String thresholdStr = subst(element.getAttribute(THRESHOLD_ATTR));    LogLog.debug("Threshold =\"" + thresholdStr +"\".");    if(!"".equals(thresholdStr) && !"null".equals(thresholdStr)) {      repository.setThreshold(thresholdStr);    }    //Hashtable appenderBag = new Hashtable(11);    /* Building Appender objects, placing them in a local namespace       for future reference */    // First configure each category factory under the root element.    // Category factories need to be configured before any of    // categories they support.    //    String   tagName = null;    Element  currentElement = null;    Node     currentNode = null;    NodeList children = element.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;	tagName = currentElement.getTagName();	if (tagName.equals(CATEGORY_FACTORY_TAG)) {	  parseCategoryFactory(currentElement);	}      }    }        for (int loop = 0; loop < length; loop++) {      currentNode = children.item(loop);      if (currentNode.getNodeType() == Node.ELEMENT_NODE) {	currentElement = (Element) currentNode;	tagName = currentElement.getTagName();	if (tagName.equals(CATEGORY) || tagName.equals(LOGGER)) {	  parseCategory(currentElement);	} else if (tagName.equals(ROOT_TAG)) {	  parseRoot(currentElement);	} else if(tagName.equals(RENDERER_TAG)) {	  parseRenderer(currentElement);	}      }    }  }    protected  String subst(String value) {    try {      return OptionConverter.substVars(value, props);    } catch(IllegalArgumentException e) {      LogLog.warn("Could not perform variable substitution.", e);      return value;    }  }}class XMLWatchdog extends FileWatchdog {  XMLWatchdog(String filename) {    super(filename);  }  /**     Call {@link PropertyConfigurator#configure(String)} with the     <code>filename</code> to reconfigure log4j. */  public  void doOnChange() {    new DOMConfigurator().doConfigure(filename, 				      LogManager.getLoggerRepository());  }}

⌨️ 快捷键说明

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