You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2022/03/23 20:37:29 UTC

[logging-log4j2] branch release-2.x updated: [LOG4J2-3419] Allows %pid in Log4j 1.x patterns

This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/release-2.x by this push:
     new 798f302  [LOG4J2-3419] Allows %pid in Log4j 1.x patterns
798f302 is described below

commit 798f3026c2e086e732e6aac0744d0154da33bb39
Author: Piotr P. Karwasz <pi...@karwasz.org>
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.
---
 .../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 54e7545..1631b42 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()
                 .withPattern(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"))
                 .withConfiguration(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 f3c0dfa..be81024 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
@@ -298,20 +298,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();
     }