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