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]