mwomack 2003/03/25 22:25:56
Modified: src/java/org/apache/log4j/xml XMLLayout.java log4j.dtd
Log:
Support for including MDC key/values in xml output, bug #18246, changes submitted by
Paul Smith.
Revision Changes Path
1.20 +37 -0 jakarta-log4j/src/java/org/apache/log4j/xml/XMLLayout.java
Index: XMLLayout.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/xml/XMLLayout.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- XMLLayout.java 9 Oct 2002 22:50:06 -0000 1.19
+++ XMLLayout.java 26 Mar 2003 06:25:55 -0000 1.20
@@ -15,6 +15,11 @@
import org.apache.log4j.helpers.OptionConverter;
import org.apache.log4j.helpers.DateLayout;
import org.apache.log4j.helpers.Transform;
+import java.util.Set;
+import java.util.Iterator;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collections;
/**
* The output of the XMLLayout consists of a series of log4j:event
@@ -122,6 +127,38 @@
buf.append("]]></log4j:NDC>\r\n");
}
+ Set mdcKeySet = event.getMDCKeySet();
+
+ if(mdcKeySet.size()>0)
+ {
+ /**
+ * Normally a sort isn't required, but for Test Case purposes
+ * we need to guarantee a particular order.
+ *
+ * Besides which, from a human readable point of view, the sorting
+ * of the keys is kinda nice..
+ */
+
+ List sortedList = new ArrayList(mdcKeySet);
+ Collections.sort(sortedList);
+
+ buf.append("<log4j:MDC>\n");
+ for (Iterator i = sortedList.iterator(); i.hasNext(); ) {
+ Object key = i.next();
+ Object val = event.getMDC(key.toString());
+ buf.append(" <log4j:data ");
+ buf.append("name=\"<![CDATA[");
+ Transform.appendEscapingCDATA(buf, key.toString());
+ buf.append("]]>\"");
+ buf.append(" ");
+ buf.append("value=\"<![CDATA[");
+ Transform.appendEscapingCDATA(buf, val.toString());
+ buf.append("]]>\"/>");
+ buf.append("\n");
+ }
+ buf.append("</log4j:MDC>\n");
+ }
+
String[] s = event.getThrowableStrRep();
if(s != null) {
buf.append("<log4j:throwable><![CDATA[");
1.21 +9 -4 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.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- log4j.dtd 10 Dec 2002 06:59:25 -0000 1.20
+++ log4j.dtd 26 Mar 2003 06:25:55 -0000 1.21
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Authors: Chris Taylor, Ceki Gulcu. -->
+<!-- Authors: Chris Taylor, Ceki Gulcu. Paul Smith -->
-<!-- Version: 1.2 -->
+<!-- Version: 1.3 -->
<!-- A configuration element consists of optional renderer
elements,appender elements, categories and an optional root
@@ -148,7 +148,7 @@
-<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?,
+<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:MDC?, log4j:throwable?,
log4j:locationInfo?) >
<!-- The timestamp format is application dependent. -->
@@ -161,7 +161,12 @@
<!ELEMENT log4j:message (#PCDATA)>
<!ELEMENT log4j:NDC (#PCDATA)>
-
+<!ELEMENT log4j:MDC (log4j:data*)>
+<!ELEMENT log4j:data (#PCDATA)>
+<!ATTLIST log4j:data
+ name CDATA #REQUIRED
+ value CDATA #REQUIRED
+>
<!ELEMENT log4j:throwable (#PCDATA)>
<!ELEMENT log4j:locationInfo EMPTY>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]