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