Author: carnold
Date: Thu Aug  9 15:02:51 2007
New Revision: 564399

URL: http://svn.apache.org/viewvc?view=rev&rev=564399
Log:
Bug 43078: Optionally render MDC content in XMLLayout

Added:
    logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.1
      - copied, changed from r563225, 
logging/log4j/trunk/tests/witness/xml/xmlLayout.mdc.1
    logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.2
      - copied, changed from r563225, 
logging/log4j/trunk/tests/witness/xml/xmlLayout.mdc.2
Modified:
    logging/log4j/branches/v1_2-branch/src/changes/changes.xml
    
logging/log4j/branches/v1_2-branch/src/main/java/org/apache/log4j/xml/XMLLayout.java
    
logging/log4j/branches/v1_2-branch/src/main/resources/org/apache/log4j/xml/log4j.dtd
    
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/util/JunitTestRunnerFilter.java
    
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/xml/XMLLayoutTestCase.java

Modified: logging/log4j/branches/v1_2-branch/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/changes/changes.xml?view=diff&rev=564399&r1=564398&r2=564399
==============================================================================
--- logging/log4j/branches/v1_2-branch/src/changes/changes.xml (original)
+++ logging/log4j/branches/v1_2-branch/src/changes/changes.xml Thu Aug  9 
15:02:51 2007
@@ -22,6 +22,7 @@
   <body>
   
     <release version="1.2.15" date="2007-06-27" description="SyslogAppender 
enhancements, NTEventLogAppender and Maven build.">
+       <action action="add" issue="43078">Optionally render MDC content in 
XMLLayout</action>
        <action action="fix" issue="42694">Typo in log4j.dtd concerning 
threshold.</action>
        <action action="fix" issue="42611">ERFATestCase fails on some 
JDK's.</action>
        <action action="fix" issue="42585">SocketNode can leak Sockets.</action>

Modified: 
logging/log4j/branches/v1_2-branch/src/main/java/org/apache/log4j/xml/XMLLayout.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/main/java/org/apache/log4j/xml/XMLLayout.java?view=diff&rev=564399&r1=564398&r2=564399
==============================================================================
--- 
logging/log4j/branches/v1_2-branch/src/main/java/org/apache/log4j/xml/XMLLayout.java
 (original)
+++ 
logging/log4j/branches/v1_2-branch/src/main/java/org/apache/log4j/xml/XMLLayout.java
 Thu Aug  9 15:02:51 2007
@@ -24,6 +24,9 @@
 import org.apache.log4j.spi.LocationInfo;
 import org.apache.log4j.spi.LoggingEvent;
 
+import java.util.Set;
+import java.util.Arrays;
+
 /**
  * The output of the XMLLayout consists of a series of log4j:event
  * elements as defined in the <a
@@ -64,6 +67,7 @@
 
   private StringBuffer buf = new StringBuffer(DEFAULT_SIZE);
   private boolean locationInfo = false;
+  private boolean properties = false;
  
   /**
    * The <b>LocationInfo</b> option takes a boolean value. By default,
@@ -86,7 +90,23 @@
   public boolean getLocationInfo() {
     return locationInfo;
   }
-  
+
+    /**
+     * Sets whether MDC key-value pairs should be output, default false.
+     * @param flag new value.
+     */
+  public void setProperties(final boolean flag) {
+      properties = flag;
+  }
+
+    /**
+     * Gets whether MDC key-value pairs should be output.
+     * @return true if MDC key-value pairs are output.
+     */
+  public boolean getProperties() {
+      return properties;
+  }
+
   /** No options to activate. */
   public void activateOptions() {
   }
@@ -151,6 +171,27 @@
       buf.append("\" line=\"");
       buf.append(locationInfo.getLineNumber());
       buf.append("\"/>\r\n");
+    }
+
+    if (properties) {
+        Set keySet = event.getPropertyKeySet();
+        if (keySet.size() > 0) {
+            buf.append("<log4j:properties>\r\n");
+            Object[] keys = keySet.toArray();
+            Arrays.sort(keys);
+            for (int i = 0; i < keys.length; i++) {
+                String key = keys[i].toString();
+                Object val = event.getMDC(key);
+                if (val != null) {
+                    buf.append("<log4j:data name=\"");
+                    buf.append(Transform.escapeTags(key));
+                    buf.append("\" value=\"");
+                    buf.append(Transform.escapeTags(val.toString()));
+                    buf.append("\"/>\r\n");
+                }
+            }
+            buf.append("</log4j:properties>\r\n");
+        }
     }
     
     buf.append("</log4j:event>\r\n\r\n");

Modified: 
logging/log4j/branches/v1_2-branch/src/main/resources/org/apache/log4j/xml/log4j.dtd
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/main/resources/org/apache/log4j/xml/log4j.dtd?view=diff&rev=564399&r1=564398&r2=564399
==============================================================================
--- 
logging/log4j/branches/v1_2-branch/src/main/resources/org/apache/log4j/xml/log4j.dtd
 (original)
+++ 
logging/log4j/branches/v1_2-branch/src/main/resources/org/apache/log4j/xml/log4j.dtd
 Thu Aug  9 15:02:51 2007
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
 
 <!-- Authors: Chris Taylor, Ceki Gulcu. -->
 
@@ -137,12 +153,12 @@
 
 <!ELEMENT connectionSource (dataSource?, param*)>
 <!ATTLIST connectionSource
-  class        CDATA  #REQUIRED
+  class        CDATA  #REQUIRED
 >
 
 <!ELEMENT dataSource (param*)>
 <!ATTLIST dataSource
-  class        CDATA  #REQUIRED
+  class        CDATA  #REQUIRED
 >
 
 <!ELEMENT triggeringPolicy ((param|filter)*)>
@@ -177,7 +193,7 @@
 
 
 <!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?, 
-                       log4j:locationInfo?) >
+                       log4j:locationInfo?, log4j:properties?) >
 
 <!-- The timestamp format is application dependent. -->
 <!ATTLIST log4j:event
@@ -185,6 +201,7 @@
     level      CDATA #REQUIRED
     thread     CDATA #REQUIRED
     timestamp  CDATA #REQUIRED
+    time       CDATA #IMPLIED
 >
 
 <!ELEMENT log4j:message (#PCDATA)>
@@ -198,4 +215,12 @@
   method CDATA #REQUIRED
   file   CDATA #REQUIRED
   line   CDATA #REQUIRED
+>
+
+<!ELEMENT log4j:properties (log4j:data*)>
+
+<!ELEMENT log4j:data EMPTY>
+<!ATTLIST log4j:data
+  name   CDATA #REQUIRED
+  value  CDATA #REQUIRED
 >

Modified: 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/util/JunitTestRunnerFilter.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/util/JunitTestRunnerFilter.java?view=diff&rev=564399&r1=564398&r2=564399
==============================================================================
--- 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/util/JunitTestRunnerFilter.java
 (original)
+++ 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/util/JunitTestRunnerFilter.java
 Thu Aug  9 15:02:51 2007
@@ -40,6 +40,11 @@
           "/at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner/",
           in)) {
       return null;
+    } else if (
+      util.match(
+          "/at com.intellij/",
+          in)) {
+      return null;
     } else if (in.indexOf("at junit.") >= 0 && in.indexOf("ui.TestRunner") >= 
0) {
        return null;
     } else if (in.indexOf("org.apache.maven") >= 0) {

Modified: 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/xml/XMLLayoutTestCase.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/xml/XMLLayoutTestCase.java?view=diff&rev=564399&r1=564398&r2=564399
==============================================================================
--- 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/xml/XMLLayoutTestCase.java
 (original)
+++ 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/xml/XMLLayoutTestCase.java
 Thu Aug  9 15:02:51 2007
@@ -23,6 +23,7 @@
 import org.apache.log4j.FileAppender;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.apache.log4j.MDC;
 import org.apache.log4j.util.Compare;
 import org.apache.log4j.util.Filter;
 import org.apache.log4j.util.JunitTestRunnerFilter;
@@ -32,6 +33,8 @@
 import org.apache.log4j.util.XMLLineAttributeFilter;
 import org.apache.log4j.util.XMLTimestampFilter;
 
+import java.util.Hashtable;
+
 public class XMLLayoutTestCase extends TestCase {
 
   static String TEMP = "output/temp";
@@ -138,6 +141,54 @@
           new SunReflectFilter()});
     assertTrue(Compare.compare(FILTERED, "witness/xmlLayout.null"));
   }
+
+    /**
+     * Tests the format of the MDC portion of the layout to ensure
+     * the key-value pairs we put in turn up in the output file.
+     * @throws Exception
+     */
+    public void testMDC() throws Exception {
+      XMLLayout xmlLayout = new XMLLayout();
+      xmlLayout.setProperties(true);
+      root.addAppender(new FileAppender(xmlLayout, TEMP, false));
+
+      Hashtable context = MDC.getContext();
+      if (context != null) {
+          context.clear();
+      }
+      MDC.put("key1", "val1");
+      MDC.put("key2", "val2");
+
+      logger.debug("Hello");
+      Transformer.transform(
+        TEMP, FILTERED,
+        new Filter[] { new LineNumberFilter(),
+            new JunitTestRunnerFilter(),
+            new XMLTimestampFilter()});
+      assertTrue(Compare.compare(FILTERED, "witness/xmlLayout.mdc.1"));
+    }
+
+    public void testMDCEscaped() throws Exception {
+      XMLLayout xmlLayout = new XMLLayout();
+      xmlLayout.setProperties(true);
+      root.addAppender(new FileAppender(xmlLayout, TEMP, false));
+
+      Hashtable context = MDC.getContext();
+      if (context != null) {
+          context.clear();
+      }
+      MDC.put("blahAttribute", "<blah value='blah'>");
+      MDC.put("<blahKey value='blah'/>", "blahValue");
+
+      logger.debug("Hello");
+      Transformer.transform(
+        TEMP, FILTERED,
+        new Filter[] { new LineNumberFilter(),
+            new JunitTestRunnerFilter(),
+            new XMLTimestampFilter() });
+      assertTrue(Compare.compare(FILTERED, "witness/xmlLayout.mdc.2"));
+    }
+
   
   void common() {
     String oldThreadName = Thread.currentThread().getName();
@@ -182,6 +233,8 @@
     suite.addTest(new XMLLayoutTestCase("locationInfo"));
     suite.addTest(new XMLLayoutTestCase("testCDATA"));
     suite.addTest(new XMLLayoutTestCase("testNull"));
+    suite.addTest(new XMLLayoutTestCase("testMDC"));
+    suite.addTest(new XMLLayoutTestCase("testMDCEscaped"));
     return suite;
   }
 

Copied: logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.1 (from 
r563225, logging/log4j/trunk/tests/witness/xml/xmlLayout.mdc.1)
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.1?view=diff&rev=564399&p1=logging/log4j/trunk/tests/witness/xml/xmlLayout.mdc.1&r1=563225&p2=logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.1&r2=564399
==============================================================================
Binary files - no diff available.

Copied: logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.2 (from 
r563225, logging/log4j/trunk/tests/witness/xml/xmlLayout.mdc.2)
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.2?view=diff&rev=564399&p1=logging/log4j/trunk/tests/witness/xml/xmlLayout.mdc.2&r1=563225&p2=logging/log4j/branches/v1_2-branch/tests/witness/xmlLayout.mdc.2&r2=564399
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to