|
16 | 16 | */ |
17 | 17 | package org.apache.logging.log4j.core.pattern; |
18 | 18 |
|
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; |
27 | 19 | import org.apache.commons.lang3.time.FastDateFormat; |
28 | 20 | import org.apache.logging.log4j.core.LogEvent; |
29 | 21 | import org.apache.logging.log4j.core.config.plugins.Plugin; |
|
37 | 29 | import org.jspecify.annotations.NullMarked; |
38 | 30 | import org.jspecify.annotations.Nullable; |
39 | 31 |
|
| 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 | + |
40 | 41 | /** |
41 | 42 | * Converts and formats the event's date in a StringBuilder. |
42 | 43 | */ |
@@ -140,53 +141,14 @@ static String decodeNamedPattern(final String pattern) { |
140 | 141 | // This is the correct behaviour for `SimpleDateFormat`. |
141 | 142 | // Though `X` in `DateTimeFormatter` produces `Z` for zero-offset. |
142 | 143 | // 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; |
188 | 151 | } |
189 | | - return pattern; |
190 | 152 | } |
191 | 153 |
|
192 | 154 | private static TimeZone readTimeZone(@Nullable final String[] options) { |
|
0 commit comments