From f7f049da1c5adbceb60f06709e45fbbfd177f5a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volkan=20Yaz=C4=B1c=C4=B1?= Date: Wed, 9 Jul 2025 20:57:03 +0200 Subject: [PATCH 1/2] Avoid using deprecated Log4J constructors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See gh-46372 Signed-off-by: Volkan Yazıcı --- ...edWhitespaceThrowablePatternConverter.java | 19 +++++++++++---- .../WhitespaceThrowablePatternConverter.java | 23 +++++++++++++++---- ...tespaceThrowablePatternConverterTests.java | 4 ++-- ...tespaceThrowablePatternConverterTests.java | 4 ++-- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java index b916ffb55a0..857c79d674e 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java @@ -21,6 +21,7 @@ import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.pattern.ConverterKeys; import org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter; +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter; import org.apache.logging.log4j.core.pattern.PatternConverter; import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter; import org.jspecify.annotations.Nullable; @@ -35,25 +36,33 @@ import org.jspecify.annotations.Nullable; */ @Plugin(name = "ExtendedWhitespaceThrowablePatternConverter", category = PatternConverter.CATEGORY) @ConverterKeys({ "xwEx", "xwThrowable", "xwException" }) -public final class ExtendedWhitespaceThrowablePatternConverter extends ThrowablePatternConverter { +public final class ExtendedWhitespaceThrowablePatternConverter extends LogEventPatternConverter { - private final ExtendedThrowablePatternConverter delegate; + private final LogEventPatternConverter delegate; + + private final String separator; @SuppressWarnings("deprecation") // https://github.com/apache/logging-log4j2/issues/3809 private ExtendedWhitespaceThrowablePatternConverter(Configuration configuration, @Nullable String[] options) { - super("WhitespaceExtendedThrowable", "throwable", options, configuration); + super("WhitespaceExtendedThrowable", "throwable"); this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options); + this.separator = ((ExtendedThrowablePatternConverter) this.delegate).getOptions().getSeparator(); } @Override public void format(LogEvent event, StringBuilder buffer) { if (event.getThrown() != null) { - buffer.append(this.options.getSeparator()); + buffer.append(this.separator); this.delegate.format(event, buffer); - buffer.append(this.options.getSeparator()); + buffer.append(this.separator); } } + @Override + public boolean handlesThrowable() { + return true; + } + /** * Creates a new instance of the class. Required by Log4J2. * @param configuration current configuration diff --git a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java index 37201f36fef..7047e3c8fce 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java @@ -20,6 +20,8 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.pattern.ConverterKeys; +import org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter; +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter; import org.apache.logging.log4j.core.pattern.PatternConverter; import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter; import org.jspecify.annotations.Nullable; @@ -33,22 +35,33 @@ import org.jspecify.annotations.Nullable; */ @Plugin(name = "WhitespaceThrowablePatternConverter", category = PatternConverter.CATEGORY) @ConverterKeys({ "wEx", "wThrowable", "wException" }) -public final class WhitespaceThrowablePatternConverter extends ThrowablePatternConverter { +public final class WhitespaceThrowablePatternConverter extends LogEventPatternConverter { + + private final LogEventPatternConverter delegate; + + private final String separator; @SuppressWarnings("deprecation") // https://github.com/apache/logging-log4j2/issues/3809 private WhitespaceThrowablePatternConverter(Configuration configuration, @Nullable String[] options) { - super("WhitespaceThrowable", "throwable", options, configuration); + super("WhitespaceThrowable", "throwable"); + this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options); + this.separator = ((ExtendedThrowablePatternConverter) this.delegate).getOptions().getSeparator(); } @Override public void format(LogEvent event, StringBuilder buffer) { if (event.getThrown() != null) { - buffer.append(this.options.getSeparator()); - super.format(event, buffer); - buffer.append(this.options.getSeparator()); + buffer.append(this.separator); + this.delegate.format(event, buffer); + buffer.append(this.separator); } } + @Override + public boolean handlesThrowable() { + return true; + } + /** * Creates a new instance of the class. Required by Log4J2. * @param configuration current configuration diff --git a/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java b/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java index c316e96b0a1..b99a96e79d1 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java @@ -19,7 +19,7 @@ package org.springframework.boot.logging.log4j2; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.DefaultConfiguration; import org.apache.logging.log4j.core.impl.Log4jLogEvent; -import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter; +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -32,7 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ class ExtendedWhitespaceThrowablePatternConverterTests { - private final ThrowablePatternConverter converter = ExtendedWhitespaceThrowablePatternConverter + private final LogEventPatternConverter converter = ExtendedWhitespaceThrowablePatternConverter .newInstance(new DefaultConfiguration(), new String[] {}); @Test diff --git a/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java b/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java index 970176a04b2..782cbeae15e 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java @@ -19,7 +19,7 @@ package org.springframework.boot.logging.log4j2; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.DefaultConfiguration; import org.apache.logging.log4j.core.impl.Log4jLogEvent; -import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter; +import org.apache.logging.log4j.core.pattern.LogEventPatternConverter; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -31,7 +31,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ class WhitespaceThrowablePatternConverterTests { - private final ThrowablePatternConverter converter = WhitespaceThrowablePatternConverter + private final LogEventPatternConverter converter = WhitespaceThrowablePatternConverter .newInstance(new DefaultConfiguration(), new String[] {}); @Test From 9c1e0e624e55ff671b00748c5e6bc8596454445a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Wed, 20 Aug 2025 16:49:16 +0200 Subject: [PATCH 2/2] Polish "Avoid using deprecated Log4J constructors" See gh-46372 --- .../log4j2/ExtendedWhitespaceThrowablePatternConverter.java | 4 ++-- .../logging/log4j2/WhitespaceThrowablePatternConverter.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java index 857c79d674e..defe0704e00 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java @@ -38,7 +38,7 @@ import org.jspecify.annotations.Nullable; @ConverterKeys({ "xwEx", "xwThrowable", "xwException" }) public final class ExtendedWhitespaceThrowablePatternConverter extends LogEventPatternConverter { - private final LogEventPatternConverter delegate; + private final ExtendedThrowablePatternConverter delegate; private final String separator; @@ -46,7 +46,7 @@ public final class ExtendedWhitespaceThrowablePatternConverter extends LogEventP private ExtendedWhitespaceThrowablePatternConverter(Configuration configuration, @Nullable String[] options) { super("WhitespaceExtendedThrowable", "throwable"); this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options); - this.separator = ((ExtendedThrowablePatternConverter) this.delegate).getOptions().getSeparator(); + this.separator = this.delegate.getOptions().getSeparator(); } @Override diff --git a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java index 7047e3c8fce..136d9bd348e 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java @@ -37,7 +37,7 @@ import org.jspecify.annotations.Nullable; @ConverterKeys({ "wEx", "wThrowable", "wException" }) public final class WhitespaceThrowablePatternConverter extends LogEventPatternConverter { - private final LogEventPatternConverter delegate; + private final ExtendedThrowablePatternConverter delegate; private final String separator; @@ -45,7 +45,7 @@ public final class WhitespaceThrowablePatternConverter extends LogEventPatternCo private WhitespaceThrowablePatternConverter(Configuration configuration, @Nullable String[] options) { super("WhitespaceThrowable", "throwable"); this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options); - this.separator = ((ExtendedThrowablePatternConverter) this.delegate).getOptions().getSeparator(); + this.separator = this.delegate.getOptions().getSeparator(); } @Override