ppkarwasz commented on PR #3789:
URL: https://github.com/apache/logging-log4j2/pull/3789#issuecomment-3066741660
> @ppkarwasz, consider users having their custom instant formatters, some
might even be relying on `{Fixed,Fast}DateFormat`. They will get excited about
`NamedInstantPattern`, will try to use it, and it won't work. They will check
the docs, have their _"Aha!"_ moment, enable legacy formatters, only to see
that it still does not work. What do you think about this issue?
Sure! Here's a clearer and more polished version of your answer. It keeps
your technical points but improves the flow, tone, and readability:
If you're suggesting that `NamedInstantPattern.getPattern()` should return
either the DTF-style or legacy pattern depending on the value of the
`log4j2.instantFormatter` config property — I’d consider that an anti-pattern.
For example, code like:
```java
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern(NamedInstantPattern.getPattern());
formatter.format(Instant.now());
```
would break if a user enables legacy formatters by setting
`log4j2.instantFormatter=legacy`. That kind of hidden behavior change
undermines the method’s predictability and makes it harder to use safely.
If someone wants to use the named patterns with `FastDateFormat`, they’ll
need to explicitly convert them. Here's an example of how that could be done:
```java
public static String convertToLegacyFormat(final String pattern) {
// Replace each consecutive 'S' beyond the first three with literal zeros
final Matcher matcher = Pattern.compile("(?<=SSS)S+").matcher(pattern);
final StringBuilder sb = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(sb, "'" +
"0".repeat(matcher.group().length()) + "'");
}
matcher.appendTail(sb);
// Replace 'x' with 'X'
return sb.toString().replace('x', 'X');
}
```
This keeps the behavior explicit and avoids magic behind the scenes.
If someone wants to use the named pattern with `FixedDateFormat` they should
consider using something more standard.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]