From b14948b55ba9f587fc8da4b8c84a816f15d99caf 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] Avoid using deprecated Log4j exception converter ctors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Volkan Yazıcı --- ...edWhitespaceThrowablePatternConverter.java | 19 ++++++++--- .../WhitespaceThrowablePatternConverter.java | 34 ++++++++++++++++--- ...tespaceThrowablePatternConverterTests.java | 4 +-- ...tespaceThrowablePatternConverterTests.java | 4 +-- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java index 3189fcb04d24..35078d078f01 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java @@ -21,6 +21,7 @@ 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; @@ -34,24 +35,32 @@ */ @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; private ExtendedWhitespaceThrowablePatternConverter(Configuration configuration, String[] options) { - super("WhitespaceExtendedThrowable", "throwable", options, configuration); + super("WhitespaceExtendedThrowable", "throwable"); this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options); + this.separator = WhitespaceThrowablePatternConverter.readSeparatorOption(options); } @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/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java index 3add666b88f3..29a1603ec413 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java @@ -20,6 +20,8 @@ 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; @@ -32,21 +34,43 @@ */ @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; private WhitespaceThrowablePatternConverter(Configuration configuration, String[] options) { - super("WhitespaceThrowable", "throwable", options, configuration); + super("WhitespaceThrowable", "throwable"); + this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options); + this.separator = readSeparatorOption(options); + } + + static String readSeparatorOption(String[] options) { + if (options != null) { + for (String option : options) { + if (option != null && option.startsWith("separator(") && option.endsWith(")")) { + return option.substring("separator(".length(), option.length() - 1); + } + } + } + return System.lineSeparator(); } @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/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java index c316e96b0a1b..b99a96e79d18 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverterTests.java @@ -19,7 +19,7 @@ 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 @@ */ class ExtendedWhitespaceThrowablePatternConverterTests { - private final ThrowablePatternConverter converter = ExtendedWhitespaceThrowablePatternConverter + private final LogEventPatternConverter converter = ExtendedWhitespaceThrowablePatternConverter .newInstance(new DefaultConfiguration(), new String[] {}); @Test diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java index 970176a04b21..782cbeae15e9 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverterTests.java @@ -19,7 +19,7 @@ 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 @@ */ class WhitespaceThrowablePatternConverterTests { - private final ThrowablePatternConverter converter = WhitespaceThrowablePatternConverter + private final LogEventPatternConverter converter = WhitespaceThrowablePatternConverter .newInstance(new DefaultConfiguration(), new String[] {}); @Test