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

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

commit 007b9831ae6c25974f5fb3ff2d7aa78d2aeffbb3
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Sun Feb 16 10:25:55 2025 +0100

    Fix formatting of `s` pattern
    
    The specialized `SecondPatternSequence` formatter is optimized to format 
the `ss.?S*` patterns, where seconds are padded. For the not padded (and 
uncommon) `s` pattern, we should use the usual `DynamicPatternSequence`.
---
 .../util/internal/instant/InstantPatternDynamicFormatterTest.java  | 7 ++++++-
 .../core/util/internal/instant/InstantPatternDynamicFormatter.java | 6 +++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatterTest.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatterTest.java
index 7829d234aa..b8faab32dd 100644
--- 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatterTest.java
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatterTest.java
@@ -100,6 +100,9 @@ class InstantPatternDynamicFormatterTest {
         testCases.add(Arguments.of(
                 "HH:mm:ss.SSSSSS", ChronoUnit.MINUTES, 
asList(pDyn("HH':'mm':'", ChronoUnit.MINUTES), pSec(".", 6))));
 
+        // Seconds without padding
+        testCases.add(Arguments.of("s.SSS", ChronoUnit.SECONDS, 
asList(pDyn("s'.'", ChronoUnit.SECONDS), pMilliSec())));
+
         return testCases;
     }
 
@@ -352,7 +355,9 @@ class InstantPatternDynamicFormatterTest {
                         "yyyy-MM-dd'T'HH:mm:ss.SSS",
                         "yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
                         "dd/MM/yy HH:mm:ss.SSS",
-                        "dd/MM/yyyy HH:mm:ss.SSS")
+                        "dd/MM/yyyy HH:mm:ss.SSS",
+                        // seconds without padding
+                        "s.SSS")
                 .flatMap(InstantPatternDynamicFormatterTest::formatterInputs);
     }
 
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatter.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatter.java
index bb8059329e..c0e14ecdbe 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatter.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/internal/instant/InstantPatternDynamicFormatter.java
@@ -239,7 +239,11 @@ final class InstantPatternDynamicFormatter implements 
InstantPatternFormatter {
                 final PatternSequence sequence;
                 switch (c) {
                     case 's':
-                        sequence = new SecondPatternSequence(true, "", 0);
+                        if (sequenceContent.length() == 2) {
+                            sequence = new SecondPatternSequence(true, "", 0);
+                        } else {
+                            sequence = new 
DynamicPatternSequence(sequenceContent);
+                        }
                         break;
                     case 'S':
                         sequence = new SecondPatternSequence(false, "", 
sequenceContent.length());

Reply via email to