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