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

📄 domconfigurator.java

📁 apache的log4j源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
              return "url [" + url.toString() + "]";           }      };      doConfigure(action, repository);  }  /**     Configure log4j by reading in a log4j.dtd compliant XML     configuration file.  */  public  void doConfigure(final InputStream inputStream, LoggerRepository repository)                                           throws FactoryConfigurationError {      ParseAction action = new ParseAction() {          public Document parse(final DocumentBuilder parser) throws SAXException, IOException {              InputSource inputSource = new InputSource(inputStream);              inputSource.setSystemId("dummy://log4j.dtd");              return parser.parse(inputSource);          }          public String toString() {               return "input stream [" + inputStream.toString() + "]";           }      };      doConfigure(action, repository);  }  /**     Configure log4j by reading in a log4j.dtd compliant XML     configuration file.  */  public  void doConfigure(final Reader reader, LoggerRepository repository)                                           throws FactoryConfigurationError {      ParseAction action = new ParseAction() {          public Document parse(final DocumentBuilder parser) throws SAXException, IOException {              InputSource inputSource = new InputSource(reader);              inputSource.setSystemId("dummy://log4j.dtd");              return parser.parse(inputSource);          }          public String toString() {               return "reader [" + reader.toString() + "]";           }      };    doConfigure(action, repository);  }  /**     Configure log4j by reading in a log4j.dtd compliant XML     configuration file.  */  protected  void doConfigure(final InputSource inputSource, LoggerRepository repository)                                           throws FactoryConfigurationError {      if (inputSource.getSystemId() == null) {          inputSource.setSystemId("dummy://log4j.dtd");      }      ParseAction action = new ParseAction() {          public Document parse(final DocumentBuilder parser) throws SAXException, IOException {              return parser.parse(inputSource);          }          public String toString() {               return "input source [" + inputSource.toString() + "]";           }      };      doConfigure(action, repository);    }          private final void doConfigure(final ParseAction action, final 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());               Document doc = action.parse(docBuilder);           parse(doc.getDocumentElement());    } catch (Exception e) {      // I know this is miserable...      LogLog.error("Could not parse "+ action.toString() + ".", 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.");    }      //      //   reset repository before configuration if reset="true"      //       on configuration element.      //    String resetAttrib = subst(element.getAttribute(RESET_ATTR));    LogLog.debug("reset attribute= \"" + resetAttrib +"\".");    if(!("".equals(resetAttrib))) {         if (OptionConverter.toBoolean(resetAttrib, false)) {             repository.resetConfiguration();         }    }    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) || tagName.equals(LOGGER_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);	} else if (!(tagName.equals(APPENDER_TAG)            || tagName.equals(CATEGORY_FACTORY_TAG)            || tagName.equals(LOGGER_FACTORY_TAG))) {        quietParseUnrecognizedElement(repository, currentElement, props);    }      }    }  }    protected  String subst(final String value) {      return subst(value, props);  }    /**     * Substitutes property value for any references in expression.     *     * @param value value from configuration file, may contain     *              literal text, property references or both     * @param props properties.     * @return evaluated expression, may still contain expressions     *         if unable to expand.     * @since 1.2.15     */    public static String subst(final String value, final Properties props) {        try {            return OptionConverter.substVars(value, props);        } catch (IllegalArgumentException e) {            LogLog.warn("Could not perform variable substitution.", e);            return value;        }    }    /**     * Sets a parameter based from configuration file content.     *     * @param elem       param element, may not be null.     * @param propSetter property setter, may not be null.     * @param props      properties     * @since 1.2.15     */    public static void setParameter(final Element elem,                                    final PropertySetter propSetter,                                    final Properties props) {        String name = subst(elem.getAttribute("name"), props);        String value = (elem.getAttribute("value"));        value = subst(OptionConverter.convertSpecialChars(value), props);        propSetter.setProperty(name, value);    }    /**     * Creates an object and processes any nested param elements     * but does not call activateOptions.  If the class also supports     * UnrecognizedElementParser, the parseUnrecognizedElement method     * will be call for any child elements other than param.     *     * @param element       element, may not be null.     * @param props         properties     * @param expectedClass interface or class expected to be implemented     *                      by created class     * @return created class or null.     * @throws Exception thrown if the contain object should be abandoned.     * @since 1.2.15     */    public static Object parseElement(final Element element,                                             final Properties props,                                             final Class expectedClass) throws Exception {        String clazz = subst(element.getAttribute("class"), props);        Object instance = OptionConverter.instantiateByClassName(clazz,                expectedClass, null);        if (instance != null) {            PropertySetter propSetter = new PropertySetter(instance);            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")) {                        setParameter(currentElement, propSetter, props);                    } else {                         parseUnrecognizedElement(instance, currentElement, props);                    }                }            }            return instance;        }        return null;    }}class XMLWatchdog extends FileWatchdog {    XMLWatchdog(String filename) {    super(filename);  }  /**     Call {@link DOMConfigurator#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 + -