From 486b80c2f41ba119440c12e87257b15fadf8fd38 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Wed, 24 Apr 2024 16:59:18 -0400 Subject: [PATCH 1/3] Use DateTimeFormatter.formatTo to directly append to StringBuilder --- .../apache/logging/log4j/message/ParameterFormatter.java | 2 +- .../java/org/apache/logging/log4j/status/StatusData.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java index ac96a1736fb..0e990894c0f 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java @@ -459,7 +459,7 @@ private static boolean appendDate(final Object o, final StringBuilder str) { if (!(o instanceof Date)) { return false; } - str.append(DATE_FORMATTER.format(((Date) o).toInstant())); + DATE_FORMATTER.formatTo(((Date) o).toInstant(), str); return true; } diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java index a56cf0e9f99..a0a7703234b 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java @@ -167,9 +167,9 @@ public Throwable getThrowable() { @SuppressWarnings("DefaultCharset") public String getFormattedStatus() { final StringBuilder sb = new StringBuilder(); - final String formattedInstant = - instantFormatter != null ? instantFormatter.format(instant) : instant.toString(); - sb.append(formattedInstant); + // DateTimeFormatter.ISO_INSTANT is the default used in instant.toString() + DateTimeFormatter formatterToUse = instantFormatter != null ? instantFormatter : DateTimeFormatter.ISO_INSTANT; + formatterToUse.formatTo(instant, sb); sb.append(SPACE); sb.append(getThreadName()); sb.append(SPACE); From 490fa6082c6eada0d1239b5cb44973b55b1bff08 Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Thu, 25 Apr 2024 11:43:40 -0400 Subject: [PATCH 2/3] Review feedback --- .../java/org/apache/logging/log4j/status/StatusData.java | 8 +++----- src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml | 8 ++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java index a0a7703234b..337224459ac 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.java @@ -38,7 +38,6 @@ public class StatusData implements Serializable { private final Instant instant; - @Nullable private final DateTimeFormatter instantFormatter; @Nullable @@ -79,7 +78,8 @@ public StatusData( @Nullable final String threadName, @Nullable final DateTimeFormatter instantFormatter, final Instant instant) { - this.instantFormatter = instantFormatter; + // DateTimeFormatter.ISO_INSTANT is the default used in instant.toString() + this.instantFormatter = instantFormatter != null ? instantFormatter : DateTimeFormatter.ISO_INSTANT; this.instant = instant; this.caller = caller; this.level = requireNonNull(level, "level"); @@ -167,9 +167,7 @@ public Throwable getThrowable() { @SuppressWarnings("DefaultCharset") public String getFormattedStatus() { final StringBuilder sb = new StringBuilder(); - // DateTimeFormatter.ISO_INSTANT is the default used in instant.toString() - DateTimeFormatter formatterToUse = instantFormatter != null ? instantFormatter : DateTimeFormatter.ISO_INSTANT; - formatterToUse.formatTo(instant, sb); + instantFormatter.formatTo(instant, sb); sb.append(SPACE); sb.append(getThreadName()); sb.append(SPACE); diff --git a/src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml b/src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml new file mode 100644 index 00000000000..e811ed6b45e --- /dev/null +++ b/src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml @@ -0,0 +1,8 @@ + + + + Use DateTimeFormatter.formatTo to directly append to StringBuilder + From b5f731b8720d53f993d24d6c7a236069b2a827cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volkan=20Yaz=C4=B1c=C4=B1?= Date: Fri, 26 Apr 2024 08:16:21 +0200 Subject: [PATCH 3/3] Improve changelog text --- src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml b/src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml index e811ed6b45e..b8cc41d1b2d 100644 --- a/src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml +++ b/src/changelog/.2.x.x/2515_datetimeformatter_formatto.xml @@ -4,5 +4,5 @@ xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-changelog-0.xsd" type="changed"> - Use DateTimeFormatter.formatTo to directly append to StringBuilder + Replace some usages of `DateTimeFormatter#toString()` with `DateTimeFormatter#formatTo(StringBuilder)` to cut down on allocations