You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2014/06/25 16:51:14 UTC

svn commit: r1605430 - in /logging/log4j/log4j2/trunk: log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ log4j...

Author: ggregory
Date: Wed Jun 25 14:51:14 2014
New Revision: 1605430

URL: http://svn.apache.org/r1605430
Log:
[LOG4J2-682] Special characters (tab and so on) in PatternLayout do not work.

Modified:
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java
    logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ProgressConsoleTest.java
    logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
    logging/log4j/log4j2/trunk/log4j-core/src/test/resources/log4j2-console-progress.xml
    logging/log4j/log4j2/trunk/src/changes/changes.xml
    logging/log4j/log4j2/trunk/src/site/xdoc/manual/layouts.xml.vm

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java?rev=1605430&r1=1605429&r2=1605430&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java Wed Jun 25 14:51:14 2014
@@ -36,7 +36,6 @@ import org.apache.logging.log4j.core.pat
 import org.apache.logging.log4j.core.pattern.PatternParser;
 import org.apache.logging.log4j.core.pattern.RegexReplacement;
 import org.apache.logging.log4j.core.util.Charsets;
-import org.apache.logging.log4j.core.util.OptionConverter;
 
 /**
  * <p>A flexible layout configurable with pattern string. The goal of this class
@@ -85,7 +84,7 @@ public final class PatternLayout extends
     /**
      * Conversion pattern.
      */
-    private final String conversionPattern;
+    private String conversionPattern;
 
 
     /**
@@ -166,12 +165,12 @@ public final class PatternLayout extends
      * @param conversionPattern conversion pattern.
      */
     public void setConversionPattern(final String conversionPattern) {
-        final String pattern = OptionConverter.convertSpecialChars(conversionPattern);
-        if (pattern == null) {
+        if (conversionPattern == null) {
             return;
         }
+        this.conversionPattern = conversionPattern;
         final PatternParser parser = createPatternParser(this.config);
-        formatters = parser.parse(pattern, this.alwaysWriteExceptions, this.noConsoleNoAnsi);
+        formatters = parser.parse(conversionPattern, this.alwaysWriteExceptions, this.noConsoleNoAnsi);
     }
 
     /**

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java?rev=1605430&r1=1605429&r2=1605430&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LiteralPatternConverter.java Wed Jun 25 14:51:14 2014
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.pa
 
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.util.OptionConverter;
 
 
 /**
@@ -41,7 +42,7 @@ public final class LiteralPatternConvert
      */
     public LiteralPatternConverter(final Configuration config, final String literal) {
         super("Literal", "literal");
-        this.literal = literal;
+        this.literal = OptionConverter.convertSpecialChars(literal);
         this.config = config;
         substitute = config != null && literal.contains("${");
     }

Modified: logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ProgressConsoleTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ProgressConsoleTest.java?rev=1605430&r1=1605429&r2=1605430&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ProgressConsoleTest.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ProgressConsoleTest.java Wed Jun 25 14:51:14 2014
@@ -7,15 +7,26 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configurator;
 
+/**
+ * 
+ * You have to watch the console to see this work, or not.
+ * 
+ * See:
+ * <ul>
+ * <li>https://issues.apache.org/jira/browse/LOG4J2-682</li>
+ * <li>https://mail-archives.apache.org/mod_mbox/logging-log4j-user/201406.mbox/%3CCAKnbemWoAXryn7UH=qMmwr=ad24La1+qv+
+ * cyO9OXxCCCJAGV_g@mail.gmail.com%3E</li>
+ * </ul>
+ */
 public class ProgressConsoleTest {
 
     private static final Logger LOG = LogManager.getLogger(ProgressConsoleTest.class);
 
     public static void main(final String[] args) {
         final LoggerContext ctx = Configurator.initialize(ProgressConsoleTest.class.getName(),
-                "src/test/resources/log4j2-console-progress.xml");
-        //src/test/resources/log4j2-console-progress.xml
-        //target/test-classes/log4j2-progress-console.xml
+                "target/test-classes/log4j2-progress-console.xml");
+        // src/test/resources/log4j2-console-progress.xml
+        // target/test-classes/log4j2-progress-console.xml
         try {
             for (double i = 0; i <= 1; i = i + 0.05) {
                 updateProgress(i);
@@ -42,7 +53,7 @@ public class ProgressConsoleTest {
         for (; i < width; i++) {
             s += " ";
         }
-        s += "](" + (new DecimalFormat("#0.00")).format(progressPercentage * 100) + "%)\r";
+        s += "](" + (new DecimalFormat("#0.00")).format(progressPercentage * 100) + "%)";
         LOG.info(s);
     }
 }

Modified: logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java?rev=1605430&r1=1605429&r2=1605430&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java Wed Jun 25 14:51:14 2014
@@ -237,5 +237,16 @@ public class PatternLayoutTest {
         assertTrue("expected \"Hello world Header\", actual \"" + new String(header) + '"', new String(header).equals(new String("Hello world Header")));
     }
 
-
+    @Test
+    public void testSpecialChars() throws Exception {
+        final LoggerContext ctx = (LoggerContext) LogManager.getContext();
+        final PatternLayout layout = PatternLayout.newBuilder()
+            .withPattern("\\\\%level\\t%msg\\n\\t%logger\\r\\n\\f")
+            .withConfiguration(ctx.getConfiguration())
+            .build();
+        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), null,
+                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world!"), null);
+        final byte[] result = layout.toByteArray(event);
+        assertEquals("\\INFO\tHello, world!\n\torg.apache.logging.log4j.core.layout.PatternLayoutTest\r\n\f", new String(result));
+    }
 }

Modified: logging/log4j/log4j2/trunk/log4j-core/src/test/resources/log4j2-console-progress.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/resources/log4j2-console-progress.xml?rev=1605430&r1=1605429&r2=1605430&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/test/resources/log4j2-console-progress.xml (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/test/resources/log4j2-console-progress.xml Wed Jun 25 14:51:14 2014
@@ -19,7 +19,7 @@
 <Configuration status="OFF">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
-      <PatternLayout pattern="%highlight{%-5level: %msg%throwable}" />
+      <PatternLayout pattern="%highlight{%-5level: %msg%throwable}\r" />
     </Console>
   </Appenders>
   <Loggers>

Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1605430&r1=1605429&r2=1605430&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Wed Jun 25 14:51:14 2014
@@ -21,6 +21,11 @@
     <title>Changes</title>
   </properties>
   <body>
+    <release version="2.0-???" date="2014-0M-DD" description="Bug fixes and enhancements">
+      <action issue="LOG4J2-682" dev="ggregory" type="fix" due-to="Scott Harrington">
+        Special characters (tab and so on) in PatternLayout do not work.
+      </action>
+    </release>
     <release version="2.0-rc2" date="2014-06-21" description="Bug fixes and enhancements">
       <action issue="LOG4J2-675" dev="rpopma" type="add">
         RollingFile and RollingRandomAccessFile now write the layout footer before rollover.

Modified: logging/log4j/log4j2/trunk/src/site/xdoc/manual/layouts.xml.vm
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/site/xdoc/manual/layouts.xml.vm?rev=1605430&r1=1605429&r2=1605430&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/site/xdoc/manual/layouts.xml.vm (original)
+++ logging/log4j/log4j2/trunk/src/site/xdoc/manual/layouts.xml.vm Wed Jun 25 14:51:14 2014
@@ -142,7 +142,9 @@
             A conversion pattern is composed of literal text and format control expressions called
             <em>conversion specifiers</em>.
           </p>
-          <p><i>Note that any literal text may be included in the conversion pattern.</i>
+          <p><i>Note that any literal text, including <b>Special Characters</b>, may be included in the conversion
+            pattern.</i> Special Characters include <b>\t</b>, <b>\n</b>, <b>\r</b>, <b>\f</b>. Use <b>\\</b> to
+            insert a single backslash into the output.
           </p>
           <p>Each conversion specifier starts with a percent sign (%) and is followed by optional <em>format
             modifiers</em> and a <em>conversion character</em>. The conversion character specifies the type of