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]

Reply via email to