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 2017/10/10 22:24:34 UTC
logging-log4j2 git commit: [LOG4J2-1216] Nested pattern layout
options broken. Apply slightly tweaked patch for formatting.
Repository: logging-log4j2
Updated Branches:
refs/heads/master c696e8055 -> 0049d85a4
[LOG4J2-1216] Nested pattern layout options broken. Apply slightly
tweaked patch for formatting.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/0049d85a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/0049d85a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/0049d85a
Branch: refs/heads/master
Commit: 0049d85a4c789974ea6354d390ba65173db8937a
Parents: c696e80
Author: Barna Zsombor Klara <gi...@cord.dk>
Authored: Tue Oct 10 16:24:31 2017 -0600
Committer: Gary Gregory <gg...@apache.org>
Committed: Tue Oct 10 16:24:31 2017 -0600
----------------------------------------------------------------------
.../log4j/core/pattern/PatternParser.java | 37 +++++++++-----------
.../log4j/core/pattern/PatternParserTest.java | 20 ++++++++++-
src/changes/changes.xml | 3 ++
3 files changed, 38 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0049d85a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
index 065ab9c..5260b11 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
@@ -272,31 +272,26 @@ public final class PatternParser {
private static int extractOptions(final String pattern, final int start, final List<String> options) {
int i = start;
while (i < pattern.length() && pattern.charAt(i) == '{') {
- final int begin = i++;
- int end;
- int depth = 0;
- do {
- end = pattern.indexOf('}', i);
- if (end == -1) {
- break;
- }
- final int next = pattern.indexOf("{", i);
- if (next != -1 && next < end) {
- i = end + 1;
- ++depth;
- } else if (depth > 0) {
- --depth;
+ i++; // skip opening "{"
+ final int begin = i; // position of first real char
+ int depth = 1; // already inside one level
+ while (depth > 0 && i < pattern.length()) {
+ char c = pattern.charAt(i);
+ if (c == '{') {
+ depth++;
+ } else if (c == '}') {
+ depth--;
+ // TODO(?) maybe escaping of { and } with \ or %
}
- } while (depth > 0);
+ i++;
+ } // while
- if (end == -1) {
- break;
+ if (depth > 0) { // option not closed, continue with pattern after closing bracket
+ return pattern.indexOf('}', start) + 1;
}
- final String r = pattern.substring(begin + 1, end);
- options.add(r);
- i = end + 1;
- }
+ options.add(pattern.substring(begin, i - 1));
+ } // while
return i;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0049d85a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
index 1e4cd92..1b68c0d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
@@ -54,6 +54,7 @@ public class PatternParserTest {
private final String mdcMsgPattern3 = "%m : %X{key2}%n";
private final String mdcMsgPattern4 = "%m : %X{key3}%n";
private final String mdcMsgPattern5 = "%m : %X{key1},%X{key2},%X{key3}%n";
+ private final String deeplyNestedPattern = "%notEmpty{ %maxLen{%X{var}}{3} }";
private static String badPattern = "[%d{yyyyMMdd HH:mm:ss,SSS] %-5p [%c{10}] - %m%n";
private static String customPattern = "[%d{yyyyMMdd HH:mm:ss,SSS}] %-5p [%-25.25c{1}:%-4L] - %m%n";
@@ -114,7 +115,7 @@ public class PatternParserTest {
formatter.format(event, buf);
}
final String str = buf.toString();
- final String expected = "INFO [PatternParserTest :100 ] - Hello, world" + Strings.LINE_SEPARATOR;
+ final String expected = "INFO [PatternParserTest :101 ] - Hello, world" + Strings.LINE_SEPARATOR;
assertTrue("Expected to end with: " + expected + ". Actual: " + str, str.endsWith(expected));
}
@@ -332,4 +333,21 @@ public class PatternParserTest {
pp.parse("%N");
assertTrue(config.getNanoClock() instanceof SystemNanoClock);
}
+
+ @Test
+ public void testDeeplyNestedPattern() {
+ final List<PatternFormatter> formatters = parser.parse(deeplyNestedPattern);
+ assertNotNull(formatters);
+ assertEquals(1, formatters.size());
+
+ final Map<String, String> mdc = new HashMap<>();
+ mdc.put("var", "1234");
+ final Log4jLogEvent event = Log4jLogEvent.newBuilder() //
+ .setContextMap(mdc).build();
+ final StringBuilder buf = new StringBuilder();
+ formatters.get(0).format(event, buf);
+ final String expected = " 123 ";
+ assertEquals(expected, buf.toString());
+
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0049d85a/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 578cc6d..d73d54c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -62,6 +62,9 @@
<action issue="LOG4J2-2053" dev="ggregory" type="fix">
Exception java.nio.charset.UnsupportedCharsetException: cp65001 in 2.9.0.
</action>
+ <action issue="LOG4J2-1216" dev="ggregory" type="fix" due-to="Thies Wellpott, Barna Zsombor Klara">
+ Nested pattern layout options broken.
+ </action>
</release>
<release version="2.9.1" date="2017-09-17" description="GA Release 2.9.1">
<action issue="LOG4J2-1988" dev="rpopma" type="fix">