You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2012/09/09 07:42:24 UTC
svn commit: r1382402 - in /logging/log4j/log4j2/trunk:
core/src/main/java/org/apache/logging/log4j/core/layout/
core/src/main/java/org/apache/logging/log4j/core/pattern/
core/src/test/java/org/apache/logging/log4j/core/pattern/ src/changes/
Author: rgoers
Date: Sun Sep 9 05:42:23 2012
New Revision: 1382402
URL: http://svn.apache.org/viewvc?rev=1382402&view=rev
Log:
Fix LOG4J2-81 - PatternLayout not honoring format modifiers
Added:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverter.java
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
logging/log4j/log4j2/trunk/src/changes/changes.xml
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java?rev=1382402&r1=1382401&r2=1382402&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/layout/PatternLayout.java Sun Sep 9 05:42:23 2012
@@ -26,6 +26,7 @@ import org.apache.logging.log4j.core.con
import org.apache.logging.log4j.core.helpers.OptionConverter;
import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
import org.apache.logging.log4j.core.pattern.PatternConverter;
+import org.apache.logging.log4j.core.pattern.PatternFormatter;
import org.apache.logging.log4j.core.pattern.PatternParser;
import org.apache.logging.log4j.core.pattern.RegexReplacement;
@@ -73,7 +74,7 @@ public final class PatternLayout extends
/**
* Initial converter for pattern.
*/
- private List<PatternConverter> converters;
+ private List<PatternFormatter> formatters;
/**
* Conversion pattern.
@@ -107,7 +108,7 @@ public final class PatternLayout extends
this.conversionPattern = pattern;
this.config = config;
PatternParser parser = createPatternParser(config);
- converters = parser.parse((pattern == null) ? DEFAULT_CONVERSION_PATTERN : pattern);
+ formatters = parser.parse((pattern == null) ? DEFAULT_CONVERSION_PATTERN : pattern);
handlesExceptions = parser.handlesExceptions();
}
@@ -125,7 +126,7 @@ public final class PatternLayout extends
return;
}
PatternParser parser = createPatternParser(this.config);
- converters = parser.parse(pattern);
+ formatters = parser.parse(pattern);
handlesExceptions = parser.handlesExceptions();
}
@@ -137,8 +138,8 @@ public final class PatternLayout extends
*/
public String formatAs(final LogEvent event) {
StringBuilder buf = new StringBuilder();
- for (PatternConverter c : converters) {
- c.format(event, buf);
+ for (PatternFormatter formatter : formatters) {
+ formatter.format(event, buf);
}
String str = buf.toString();
if (replace != null) {
Added: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java?rev=1382402&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java (added)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternFormatter.java Sun Sep 9 05:42:23 2012
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.core.pattern;
+
+import org.apache.logging.log4j.core.LogEvent;
+
+
+/**
+ *
+ */
+public class PatternFormatter {
+ private LogEventPatternConverter converter;
+ private FormattingInfo field;
+
+ public PatternFormatter(LogEventPatternConverter converter, FormattingInfo field) {
+ this.converter = converter;
+ this.field = field;
+ }
+
+ public void format(LogEvent event, StringBuilder buf) {
+ int startField = buf.length();
+ converter.format(event, buf);
+ field.format(startField, buf);
+ }
+
+ public LogEventPatternConverter getConverter() {
+ return converter;
+ }
+
+ public FormattingInfo getFormattingInfo() {
+ return field;
+ }
+}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java?rev=1382402&r1=1382401&r2=1382402&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java Sun Sep 9 05:42:23 2012
@@ -17,6 +17,7 @@
package org.apache.logging.log4j.core.pattern;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.plugins.PluginManager;
import org.apache.logging.log4j.core.config.plugins.PluginType;
@@ -125,35 +126,33 @@ public final class PatternParser {
}
- public List<PatternConverter> parse(String pattern) {
+ public List<PatternFormatter> parse(String pattern) {
+ List<PatternFormatter> list = new ArrayList<PatternFormatter>();
List<PatternConverter> converters = new ArrayList<PatternConverter>();
List<FormattingInfo> fields = new ArrayList<FormattingInfo>();
parse(pattern, converters, fields);
- LogEventPatternConverter[] patternConverters = new LogEventPatternConverter[converters.size()];
- FormattingInfo[] patternFields = new FormattingInfo[converters.size()];
-
- int i = 0;
Iterator fieldIter = fields.iterator();
for (PatternConverter converter : converters) {
+ LogEventPatternConverter pc;
if (converter instanceof LogEventPatternConverter) {
- patternConverters[i] = (LogEventPatternConverter) converter;
- handlesExceptions |= patternConverters[i].handlesThrowable();
+ pc = (LogEventPatternConverter) converter;
+ handlesExceptions |= pc.handlesThrowable();
} else {
- patternConverters[i] = new LiteralPatternConverter("");
+ pc = new LiteralPatternConverter("");
}
+ FormattingInfo field;
if (fieldIter.hasNext()) {
- patternFields[i] = (FormattingInfo) fieldIter.next();
+ field = (FormattingInfo) fieldIter.next();
} else {
- patternFields[i] = FormattingInfo.getDefault();
+ field = FormattingInfo.getDefault();
}
-
- i++;
+ list.add(new PatternFormatter(pc, field));
}
- return converters;
+ return list;
}
public boolean handlesExceptions() {
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverter.java?rev=1382402&r1=1382401&r2=1382402&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/pattern/RegexReplacementConverter.java Sun Sep 9 05:42:23 2012
@@ -35,20 +35,20 @@ public final class RegexReplacementConve
private final String substitution;
- private List<PatternConverter> converters;
+ private List<PatternFormatter> formatters;
/**
* Construct the converter.
- * @param converters The PatternConverters to generate the text to manipulate.
+ * @param formatters The PatternFormatters to generate the text to manipulate.
* @param pattern The regular expression Pattern.
* @param substitution The substitution string.
*/
- private RegexReplacementConverter(List<PatternConverter> converters,
+ private RegexReplacementConverter(List<PatternFormatter> formatters,
Pattern pattern, String substitution) {
super("replace", "replace");
this.pattern = pattern;
this.substitution = substitution;
- this.converters = converters;
+ this.formatters = formatters;
}
/**
@@ -78,8 +78,8 @@ public final class RegexReplacementConve
}
Pattern p = Pattern.compile(options[1]);
PatternParser parser = PatternLayout.createPatternParser(config);
- List<PatternConverter> converters = parser.parse(options[0]);
- return new RegexReplacementConverter(converters, p, options[2]);
+ List<PatternFormatter> formatters = parser.parse(options[0]);
+ return new RegexReplacementConverter(formatters, p, options[2]);
}
@@ -88,8 +88,8 @@ public final class RegexReplacementConve
*/
public void format(final LogEvent event, final StringBuilder toAppendTo) {
StringBuilder buf = new StringBuilder();
- for (PatternConverter c : converters) {
- c.format(event, buf);
+ for (PatternFormatter formatter : formatters) {
+ formatter.format(event, buf);
}
toAppendTo.append(pattern.matcher(buf.toString()).replaceAll(substitution));
}
Modified: logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java?rev=1382402&r1=1382401&r2=1382402&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java (original)
+++ logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java Sun Sep 9 05:42:23 2012
@@ -16,10 +16,15 @@
*/
package org.apache.logging.log4j.core.pattern;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.MarkerManager;
+import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.message.SimpleMessage;
import org.junit.Before;
import org.junit.Test;
@@ -28,7 +33,9 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
*
@@ -47,6 +54,8 @@ public class PatternParserTest {
private String mdcMsgPattern4 = "%m : %X{key3}%n";
private String mdcMsgPattern5 = "%m : %X{key1},%X{key2},%X{key3}%n";
+ private static String customPattern = "[%d{yyyyMMdd HH:mm:ss,SSS}] %-5p [%-25.25c{1}:%-4L] - %m%n";
+
private static final String KEY = "Converter";
private PatternParser parser;
@@ -56,8 +65,8 @@ public class PatternParserTest {
parser = new PatternParser(KEY);
}
- private void validateConverter(List<PatternConverter> converters, int index, String name) {
- PatternConverter pc = converters.get(index);
+ private void validateConverter(List<PatternFormatter> formatter, int index, String name) {
+ PatternConverter pc = formatter.get(index).getConverter();
assertEquals("Incorrect converter " + pc.getName() + " at index " + index + " expected " + name,
pc.getName(), name);
}
@@ -67,11 +76,35 @@ public class PatternParserTest {
*/
@Test
public void defaultPattern() {
- List<PatternConverter> converters = parser.parse(msgPattern);
- assertNotNull(converters);
- assertTrue(converters.size() == 2);
- validateConverter(converters, 0, "Message");
- validateConverter(converters, 1, "Line Sep");
+ List<PatternFormatter> formatters = parser.parse(msgPattern);
+ assertNotNull(formatters);
+ assertTrue(formatters.size() == 2);
+ validateConverter(formatters, 0, "Message");
+ validateConverter(formatters, 1, "Line Sep");
}
+ /**
+ * Test the custome pattern
+ */
+ @Test
+ public void testCustomPattern() {
+ List<PatternFormatter> formatters = parser.parse(customPattern);
+ assertNotNull(formatters);
+ Map<String, String> mdc = new HashMap<String, String>();
+ mdc.put("loginId", "Fred");
+ Throwable t = new Throwable();
+ StackTraceElement[] elements = t.getStackTrace();
+ LogEvent event = new Log4jLogEvent("org.apache.logging.log4j.PatternParserTest", MarkerManager.getMarker("TEST"),
+ Logger.class.getName(), Level.INFO, new SimpleMessage("Hello, world"), null,
+ mdc, null, "Thread1", elements[0], System.currentTimeMillis());
+ StringBuilder buf = new StringBuilder();
+ for (PatternFormatter formatter : formatters) {
+ formatter.format(event, buf);
+ }
+ String str = buf.toString();
+ String expected = "INFO [PatternParserTest :95 ] - Hello, world\n";
+ assertTrue("Expected to end with: " + expected + ". Actual: " + str, str.endsWith(expected));
+ }
+
+
}
Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1382402&r1=1382401&r2=1382402&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Sun Sep 9 05:42:23 2012
@@ -23,6 +23,9 @@
<body>
<release version="2.0-alpha3" date="TBD" description="">
+ <action issue="LOG4J-81" dev="rgoers" type="fix">
+ PatternLayout was not honoring format modifiers.
+ </action>
<action dev="rgoers" type="fix">
Created web module to allow web applications to include the Log4j context listener in WEB-INF/lib even if
Log4j is in the container's class path. Allow locating the LoggerContext to include the ClassLoader. Updated