This is an automated email from the ASF dual-hosted git repository. pkarwasz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit c44d7e8e3ae4eaf2c941d6cac7502d073e0a1a06 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Wed Mar 23 21:37:20 2022 +0100 [LOG4J2-3419] Allows %pid in Log4j 1.x patterns Although `%pid` was never a valid Log4j 1.x pattern, it was supported in the previous bridge versions. This fixes a regression with respect to `log4j-1.2-api` version 2.17.2. Conflicts: log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/PatternLayoutBuilder.java --- .../org/apache/log4j/builders/layout/PatternLayoutBuilder.java | 6 +++--- .../java/org/apache/log4j/config/Log4j1ConfigurationParser.java | 6 +++--- .../apache/log4j/builders/layout/PatternLayoutBuilderTest.java | 8 +++++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/PatternLayoutBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/PatternLayoutBuilder.java index 8d87942..21bf486 100644 --- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/PatternLayoutBuilder.java +++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/PatternLayoutBuilder.java @@ -87,20 +87,20 @@ public class PatternLayoutBuilder extends AbstractBuilder<Layout> implements Lay return LayoutWrapper.adapt(PatternLayout.newBuilder() .setPattern(pattern // Log4j 2 and Log4j 1 level names differ for custom levels - .replaceAll("%([-\\.\\d]*)p", "%$1v1Level") + .replaceAll("%([-\\.\\d]*)p(?!\\w)", "%$1v1Level") // Log4j 2's %x (NDC) is not compatible with Log4j 1's // %x // Log4j 1: "foo bar baz" // Log4j 2: "[foo, bar, baz]" // Use %ndc to get the Log4j 1 format - .replaceAll("%([-\\.\\d]*)x", "%$1ndc") + .replaceAll("%([-\\.\\d]*)x(?!\\w)", "%$1ndc") // Log4j 2's %X (MDC) is not compatible with Log4j 1's // %X // Log4j 1: "{{foo,bar}{hoo,boo}}" // Log4j 2: "{foo=bar,hoo=boo}" // Use %properties to get the Log4j 1 format - .replaceAll("%([-\\.\\d]*)X", "%$1properties")) + .replaceAll("%([-\\.\\d]*)X(?!\\w)", "%$1properties")) .setConfiguration(config) .build()); } diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java index 33a0ba2..3d364bc 100644 --- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java +++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationParser.java @@ -295,20 +295,20 @@ public class Log4j1ConfigurationParser { if (pattern != null) { pattern = pattern // Log4j 2 and Log4j 1 level names differ for custom levels - .replaceAll("%([-\\.\\d]*)p", "%$1v1Level") + .replaceAll("%([-\\.\\d]*)p(?!\\w)", "%$1v1Level") // Log4j 2's %x (NDC) is not compatible with Log4j 1's // %x // Log4j 1: "foo bar baz" // Log4j 2: "[foo, bar, baz]" // Use %ndc to get the Log4j 1 format - .replaceAll("%([-\\.\\d]*)x", "%$1ndc") + .replaceAll("%([-\\.\\d]*)x(?!\\w)", "%$1ndc") // Log4j 2's %X (MDC) is not compatible with Log4j 1's // %X // Log4j 1: "{{foo,bar}{hoo,boo}}" // Log4j 2: "{foo=bar,hoo=boo}" // Use %properties to get the Log4j 1 format - .replaceAll("%([-\\.\\d]*)X", "%$1properties"); + .replaceAll("%([-\\.\\d]*)X(?!\\w)", "%$1properties"); } else { pattern = "%m%n"; } diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/builders/layout/PatternLayoutBuilderTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/builders/layout/PatternLayoutBuilderTest.java index 9a22389..e8a8280 100644 --- a/log4j-1.2-api/src/test/java/org/apache/log4j/builders/layout/PatternLayoutBuilderTest.java +++ b/log4j-1.2-api/src/test/java/org/apache/log4j/builders/layout/PatternLayoutBuilderTest.java @@ -37,7 +37,13 @@ public class PatternLayoutBuilderTest { Arguments.of("%-100p", "%-100v1Level"), Arguments.of("%x", "%ndc"), Arguments.of("%X", "%properties"), - Arguments.of("%.20x", "%.20ndc")) + Arguments.of("%.20x", "%.20ndc"), + Arguments.of("%pid", "%pid"), + Arguments.of("%xEx", "%xEx"), + Arguments.of("%XX", "%XX"), + Arguments.of("%p id", "%v1Level id"), + Arguments.of("%x Ex", "%ndc Ex"), + Arguments.of("%X X", "%properties X")) .stream(); }
