Skip to content

Commit b552557

Browse files
committed
Created an enum for choosing a named pattern.
Signed-off-by: Roy Ash <[email protected]>
1 parent 9b66389 commit b552557

File tree

2 files changed

+59
-54
lines changed

2 files changed

+59
-54
lines changed

log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java

Lines changed: 16 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,6 @@
1616
*/
1717
package org.apache.logging.log4j.core.pattern;
1818

19-
import static java.util.Objects.requireNonNull;
20-
21-
import java.time.format.DateTimeFormatter;
22-
import java.util.Arrays;
23-
import java.util.Date;
24-
import java.util.Locale;
25-
import java.util.TimeZone;
26-
import java.util.stream.Collectors;
2719
import org.apache.commons.lang3.time.FastDateFormat;
2820
import org.apache.logging.log4j.core.LogEvent;
2921
import org.apache.logging.log4j.core.config.plugins.Plugin;
@@ -37,6 +29,15 @@
3729
import org.jspecify.annotations.NullMarked;
3830
import org.jspecify.annotations.Nullable;
3931

32+
import java.time.format.DateTimeFormatter;
33+
import java.util.Arrays;
34+
import java.util.Date;
35+
import java.util.Locale;
36+
import java.util.TimeZone;
37+
import java.util.stream.Collectors;
38+
39+
import static java.util.Objects.requireNonNull;
40+
4041
/**
4142
* Converts and formats the event's date in a StringBuilder.
4243
*/
@@ -140,53 +141,14 @@ static String decodeNamedPattern(final String pattern) {
140141
// This is the correct behaviour for `SimpleDateFormat`.
141142
// Though `X` in `DateTimeFormatter` produces `Z` for zero-offset.
142143
// To avoid the `Z` output, one needs to use `x` with `DateTimeFormatter`.
143-
final boolean compat = InstantPatternFormatter.LEGACY_FORMATTERS_ENABLED;
144-
145-
switch (pattern) {
146-
case "ABSOLUTE":
147-
return "HH:mm:ss,SSS";
148-
case "ABSOLUTE_MICROS":
149-
return "HH:mm:ss," + (compat ? "nnnnnn" : "SSSSSS");
150-
case "ABSOLUTE_NANOS":
151-
return "HH:mm:ss," + (compat ? "nnnnnnnnn" : "SSSSSSSSS");
152-
case "ABSOLUTE_PERIOD":
153-
return "HH:mm:ss.SSS";
154-
case "COMPACT":
155-
return "yyyyMMddHHmmssSSS";
156-
case "DATE":
157-
return "dd MMM yyyy HH:mm:ss,SSS";
158-
case "DATE_PERIOD":
159-
return "dd MMM yyyy HH:mm:ss.SSS";
160-
case "DEFAULT":
161-
return "yyyy-MM-dd HH:mm:ss,SSS";
162-
case "DEFAULT_MICROS":
163-
return "yyyy-MM-dd HH:mm:ss," + (compat ? "nnnnnn" : "SSSSSS");
164-
case "DEFAULT_NANOS":
165-
return "yyyy-MM-dd HH:mm:ss," + (compat ? "nnnnnnnnn" : "SSSSSSSSS");
166-
case "DEFAULT_PERIOD":
167-
return "yyyy-MM-dd HH:mm:ss.SSS";
168-
case "ISO8601_BASIC":
169-
return "yyyyMMdd'T'HHmmss,SSS";
170-
case "ISO8601_BASIC_PERIOD":
171-
return "yyyyMMdd'T'HHmmss.SSS";
172-
case "ISO8601":
173-
return "yyyy-MM-dd'T'HH:mm:ss,SSS";
174-
case "ISO8601_OFFSET_DATE_TIME_HH":
175-
return "yyyy-MM-dd'T'HH:mm:ss,SSS" + (compat ? "X" : "x");
176-
case "ISO8601_OFFSET_DATE_TIME_HHMM":
177-
return "yyyy-MM-dd'T'HH:mm:ss,SSS" + (compat ? "XX" : "xx");
178-
case "ISO8601_OFFSET_DATE_TIME_HHCMM":
179-
return "yyyy-MM-dd'T'HH:mm:ss,SSS" + (compat ? "XXX" : "xxx");
180-
case "ISO8601_PERIOD":
181-
return "yyyy-MM-dd'T'HH:mm:ss.SSS";
182-
case "ISO8601_PERIOD_MICROS":
183-
return "yyyy-MM-dd'T'HH:mm:ss." + (compat ? "nnnnnn" : "SSSSSS");
184-
case "US_MONTH_DAY_YEAR2_TIME":
185-
return "dd/MM/yy HH:mm:ss.SSS";
186-
case "US_MONTH_DAY_YEAR4_TIME":
187-
return "dd/MM/yyyy HH:mm:ss.SSS";
144+
try {
145+
final NamedPattern namedPattern = NamedPattern.valueOf(pattern);
146+
return InstantPatternFormatter.LEGACY_FORMATTERS_ENABLED ?
147+
namedPattern.getLegacyPattern() :
148+
namedPattern.getNonLegacyPattern();
149+
} catch (IllegalArgumentException ignored) { // for Java 22+ it can be changed to `IllegalArgumentException _`
150+
return pattern;
188151
}
189-
return pattern;
190152
}
191153

192154
private static TimeZone readTimeZone(@Nullable final String[] options) {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.apache.logging.log4j.core.pattern;
2+
3+
@SuppressWarnings("SpellCheckingInspection")
4+
public enum NamedPattern {
5+
ABSOLUTE("HH:mm:ss,SSS", "HH:mm:ss,SSS"),
6+
ABSOLUTE_MICROS("HH:mm:ss,nnnnnn", "HH:mm:ss,SSSSSS"),
7+
ABSOLUTE_NANOS("HH:mm:ss,nnnnnnnnn", "HH:mm:ss,SSSSSSSSS"),
8+
ABSOLUTE_PERIOD("HH:mm:ss.SSS", "HH:mm:ss.SSS"),
9+
COMPACT("yyyyMMddHHmmssSSS", "yyyyMMddHHmmssSSS"),
10+
DATE("dd MMM yyyy HH:mm:ss,SSS", "dd MMM yyyy HH:mm:ss,SSS"),
11+
DATE_PERIOD("dd MMM yyyy HH:mm:ss.SSS", "dd MMM yyyy HH:mm:ss.SSS"),
12+
DEFAULT("yyyy-MM-dd HH:mm:ss,SSS", "yyyy-MM-dd HH:mm:ss,SSS"),
13+
DEFAULT_MICROS("yyyy-MM-dd HH:mm:ss,nnnnnn", "yyyy-MM-dd HH:mm:ss,SSSSSS"),
14+
DEFAULT_NANOS("yyyy-MM-dd HH:mm:ss,nnnnnnnnn", "yyyy-MM-dd HH:mm:ss,SSSSSSSSS"),
15+
DEFAULT_PERIOD("yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss.SSS"),
16+
ISO8601_BASIC("yyyyMMdd'T'HHmmss,SSS", "yyyyMMdd'T'HHmmss,SSS"),
17+
ISO8601_BASIC_PERIOD("yyyyMMdd'T'HHmmss.SSS", "yyyyMMdd'T'HHmmss.SSS"),
18+
ISO8601("yyyy-MM-dd'T'HH:mm:ss,SSS", "yyyy-MM-dd'T'HH:mm:ss,SSS"),
19+
ISO8601_OFFSET_DATE_TIME_HH("yyyy-MM-dd'T'HH:mm:ss,SSSX", "yyyy-MM-dd'T'HH:mm:ss,SSSx"),
20+
ISO8601_OFFSET_DATE_TIME_HHMM("yyyy-MM-dd'T'HH:mm:ss,SSSyyyy-MM-dd'T'HH:mm:ss,SSSXX", "yyyy-MM-dd'T'HH:mm:ss,SSSxx"),
21+
ISO8601_OFFSET_DATE_TIME_HHCMM("yyyy-MM-dd'T'HH:mm:ss,SSSyyyy-MM-dd'T'HH:mm:ss,SSSXXX", "yyyy-MM-dd'T'HH:mm:ss,SSSxxx"),
22+
ISO8601_PERIOD("yyyy-MM-dd'T'HH:mm:ss.SSS", "yyyy-MM-dd'T'HH:mm:ss.SSS"),
23+
ISO8601_PERIOD_MICROS("yyyy-MM-dd'T'HH:mm:ss.nnnnnn", "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"),
24+
US_MONTH_DAY_YEAR2_TIME("dd/MM/yy HH:mm:ss.SSS", "dd/MM/yy HH:mm:ss.SSS"),
25+
US_MONTH_DAY_YEAR4_TIME("dd/MM/yyyy HH:mm:ss.SSS", "dd/MM/yyyy HH:mm:ss.SSS");
26+
27+
private final String
28+
legacyPattern,
29+
nonLegacyPattern;
30+
31+
NamedPattern(String legacyPattern, String nonLegacyPattern) {
32+
this.legacyPattern = legacyPattern;
33+
this.nonLegacyPattern = nonLegacyPattern;
34+
}
35+
36+
public String getLegacyPattern() {
37+
return legacyPattern;
38+
}
39+
40+
public String getNonLegacyPattern() {
41+
return nonLegacyPattern;
42+
}
43+
}

0 commit comments

Comments
 (0)