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();
     }
 

Reply via email to