You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-cvs@jakarta.apache.org by pg...@apache.org on 2001/06/25 08:58:10 UTC

cvs commit: jakarta-log4j/src/java/org/apache/log4j/xml DOMConfigurator.java log4j.dtd

pglezen     01/06/24 23:58:10

  Modified:    src/java/org/apache/log4j/xml DOMConfigurator.java log4j.dtd
  Log:
  Added ability to configure a category factory with XML. This involved
  the following changes to DOMConfigurator.java
  1. Added parseCategoryFactory method
  2. Invoke method from parse(Element, Hierarchy)
  3. Add a constant for the tag name
  An element definition for category factories was added to log4j.dtd.
  Thanks to Umair Akeel, Jay Riddell and others for their suggestions
  and patience.
  
  Revision  Changes    Path
  1.25      +61 -3     jakarta-log4j/src/java/org/apache/log4j/xml/DOMConfigurator.java
  
  Index: DOMConfigurator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/xml/DOMConfigurator.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- DOMConfigurator.java	2001/06/20 07:59:55	1.24
  +++ DOMConfigurator.java	2001/06/25 06:58:09	1.25
  @@ -18,6 +18,7 @@
   import org.apache.log4j.spi.ErrorHandler;
   import org.apache.log4j.spi.AppenderAttachable;
   import org.apache.log4j.spi.Configurator;
  +import org.apache.log4j.spi.CategoryFactory;
   import org.apache.log4j.Appender;
   import org.apache.log4j.Layout;
   import org.apache.log4j.Priority;
  @@ -73,6 +74,7 @@
     static final String PARAM_TAG    	= "param";
     static final String LAYOUT_TAG	= "layout";
     static final String CATEGORY		= "category";
  +  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";
  @@ -321,6 +323,42 @@
   
   
     /**
  +     Used internally to parse the category factory element.
  +  */
  +  protected
  +  void parseCategoryFactory(Element factoryElement, Hierarchy hierarchy) {
  +    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, 
  +                                                                 CategoryFactory.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
  @@ -679,14 +717,34 @@
   
       /* 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, hierarchy);
  +	}
  +      }
  +    }
       
       for (int loop = 0; loop < length; loop++) {
  -      Node currentNode = children.item(loop);
  +      currentNode = children.item(loop);
         if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
  -	Element currentElement = (Element) currentNode;
  -	String tagName = currentElement.getTagName();
  +	currentElement = (Element) currentNode;
  +	tagName = currentElement.getTagName();
   
   	if (tagName.equals(CATEGORY)) {
   	  parseCategory(currentElement, hierarchy);
  
  
  
  1.9       +7 -3      jakarta-log4j/src/java/org/apache/log4j/xml/log4j.dtd
  
  Index: log4j.dtd
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/xml/log4j.dtd,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- log4j.dtd	2001/06/19 15:45:01	1.8
  +++ log4j.dtd	2001/06/25 06:58:09	1.9
  @@ -6,7 +6,7 @@
   elements,appender elements, categories and an optional root
   element. -->
   
  -<!ELEMENT log4j:configuration (renderer*, appender*,category*,root?)>
  +<!ELEMENT log4j:configuration (renderer*, appender*,category*,root?,categoryFactory?)>
   
   <!-- The disable attribute takes a priority value such that all -->
   <!-- logging statements with a prioroty equal or below this value are -->
  @@ -47,7 +47,7 @@
   <!-- WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING   -->
   <!-- DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED -->
   
  -<!ELEMENT configuration (renderer*, appender*,category*,root?)>
  +<!ELEMENT configuration (renderer*, appender*,category*,root?,categoryFactory?)>
   <!ATTLIST configuration
     disable                  (debug|info|warn|error|fatal|null)  "null"
     disableOverride          (true|false|null)  "null"
  @@ -118,6 +118,10 @@
     additivity	(true|false) "true"  
   >
   
  +<!ELEMENT categoryFactory (param*)>
  +<!ATTLIST categoryFactory 
  +   class        CDATA #REQUIRED>
  +
   <!ELEMENT appender-ref EMPTY>
   <!ATTLIST appender-ref
     ref IDREF #REQUIRED
  @@ -162,4 +166,4 @@
     method CDATA	#REQUIRED
     file   CDATA	#REQUIRED
     line   CDATA	#REQUIRED
  ->
  \ No newline at end of file
  +>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-cvs-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-cvs-help@jakarta.apache.org