Skip to content

Commit 50e5421

Browse files
committed
Roll back to Log4j 2.24
This reverts: - 7a5e77f - 1590e4d - 8cf0d17 See gh-46334, gh-46372
1 parent 1590e4d commit 50e5421

18 files changed

+78
-108
lines changed

config/checkstyle/checkstyle-suppressions.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,4 @@
7575
<suppress files="ConditionMessage\.java" checks="NoWhitespaceBefore" message="'...' is preceded with whitespace"/>
7676
<suppress files="EntityManagerFactoryBuilder\.java" checks="NoWhitespaceBefore" message="'...' is preceded with whitespace"/>
7777
<suppress files="DockerApi\.java" checks="NoWhitespaceBefore" message="'...' is preceded with whitespace"/>
78-
<!-- https://github.com/apache/logging-log4j2/issues/2769#issuecomment-3049020222 -->
79-
<suppress files="SpringProfileArbiter\.java" checks="SpringMethodVisibility"/>
80-
<suppress files="StructuredLogLayout\.java" checks="SpringMethodVisibility"/>
8178
</suppressions>

core/spring-boot/build.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,6 @@ tasks.named("checkFormatMain") {
8787
source(fileTree("src/main/javaTemplates"))
8888
}
8989

90-
tasks.named("compileJava") {
91-
// Provide the project coordinates to the `GraalVmProcessor`:
92-
options.compilerArgs << '-Alog4j.graalvm.groupId=org.springframework.boot'
93-
options.compilerArgs << '-Alog4j.graalvm.artifactId=spring-boot-log4j'
94-
}
95-
9690
plugins.withType(EclipsePlugin) {
9791
eclipse {
9892
synchronizationTasks syncJavaTemplates

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ElasticCommonSchemaStructuredLogFormatter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
import java.util.Objects;
2020
import java.util.Set;
2121
import java.util.TreeSet;
22-
import java.util.function.Function;
2322

2423
import org.apache.logging.log4j.Level;
2524
import org.apache.logging.log4j.Marker;
2625
import org.apache.logging.log4j.core.LogEvent;
26+
import org.apache.logging.log4j.core.impl.ThrowableProxy;
2727
import org.apache.logging.log4j.core.time.Instant;
2828
import org.apache.logging.log4j.util.ReadOnlyStringMap;
2929
import org.jspecify.annotations.Nullable;
@@ -71,10 +71,10 @@ private static void jsonMembers(Environment environment, @Nullable StackTracePri
7171
members.add("message", LogEvent::getMessage).as(StructuredMessage::get);
7272
members.from(LogEvent::getContextData)
7373
.usingPairs(contextPairs.nested(ElasticCommonSchemaStructuredLogFormatter::addContextDataPairs));
74-
members.from(LogEvent::getThrown).whenNotNull().usingMembers((thrownProxyMembers) -> {
74+
members.from(LogEvent::getThrownProxy).whenNotNull().usingMembers((thrownProxyMembers) -> {
7575
thrownProxyMembers.add("error").usingMembers((error) -> {
76-
error.add("type", Function.identity()).whenNotNull().as(ObjectUtils::nullSafeClassName);
77-
error.add("message", Throwable::getMessage);
76+
error.add("type", ThrowableProxy::getThrowable).whenNotNull().as(ObjectUtils::nullSafeClassName);
77+
error.add("message", ThrowableProxy::getMessage);
7878
error.add("stack_trace", extractor::stackTrace);
7979
});
8080
});

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/ExtendedWhitespaceThrowablePatternConverter.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.apache.logging.log4j.core.config.plugins.Plugin;
2222
import org.apache.logging.log4j.core.pattern.ConverterKeys;
2323
import org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter;
24-
import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
2524
import org.apache.logging.log4j.core.pattern.PatternConverter;
2625
import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;
2726
import org.jspecify.annotations.Nullable;
@@ -36,33 +35,24 @@
3635
*/
3736
@Plugin(name = "ExtendedWhitespaceThrowablePatternConverter", category = PatternConverter.CATEGORY)
3837
@ConverterKeys({ "xwEx", "xwThrowable", "xwException" })
39-
public final class ExtendedWhitespaceThrowablePatternConverter extends LogEventPatternConverter {
38+
public final class ExtendedWhitespaceThrowablePatternConverter extends ThrowablePatternConverter {
4039

4140
private final ExtendedThrowablePatternConverter delegate;
4241

43-
private final String separator;
44-
45-
@SuppressWarnings("deprecation") // https://github.com/apache/logging-log4j2/issues/3809
46-
private ExtendedWhitespaceThrowablePatternConverter(Configuration configuration, @Nullable String[] options) {
47-
super("WhitespaceExtendedThrowable", "throwable");
42+
private ExtendedWhitespaceThrowablePatternConverter(Configuration configuration, String @Nullable [] options) {
43+
super("WhitespaceExtendedThrowable", "throwable", options, configuration);
4844
this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options);
49-
this.separator = this.delegate.getOptions().getSeparator();
5045
}
5146

5247
@Override
5348
public void format(LogEvent event, StringBuilder buffer) {
5449
if (event.getThrown() != null) {
55-
buffer.append(this.separator);
50+
buffer.append(this.options.getSeparator());
5651
this.delegate.format(event, buffer);
57-
buffer.append(this.separator);
52+
buffer.append(this.options.getSeparator());
5853
}
5954
}
6055

61-
@Override
62-
public boolean handlesThrowable() {
63-
return true;
64-
}
65-
6656
/**
6757
* Creates a new instance of the class. Required by Log4J2.
6858
* @param configuration current configuration
@@ -71,7 +61,7 @@ public boolean handlesThrowable() {
7161
* @return a new {@code WhitespaceThrowablePatternConverter}
7262
*/
7363
public static ExtendedWhitespaceThrowablePatternConverter newInstance(Configuration configuration,
74-
@Nullable String[] options) {
64+
String @Nullable [] options) {
7565
return new ExtendedWhitespaceThrowablePatternConverter(configuration, options);
7666
}
7767

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/Extractor.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616

1717
package org.springframework.boot.logging.log4j2;
1818

19-
import java.io.PrintWriter;
20-
import java.io.StringWriter;
21-
2219
import org.apache.logging.log4j.core.LogEvent;
20+
import org.apache.logging.log4j.core.impl.ThrowableProxy;
2321
import org.jspecify.annotations.Nullable;
2422
import org.slf4j.event.LoggingEvent;
2523

2624
import org.springframework.boot.logging.StackTracePrinter;
25+
import org.springframework.util.Assert;
2726

2827
/**
2928
* Functions to extract items from {@link LoggingEvent}.
@@ -43,23 +42,19 @@ String messageAndStackTrace(LogEvent event) {
4342
}
4443

4544
@Nullable String stackTrace(LogEvent event) {
46-
return stackTrace(event.getThrown());
45+
return stackTrace(event.getThrownProxy());
4746
}
4847

49-
@Nullable String stackTrace(@Nullable Throwable throwable) {
50-
if (throwable == null) {
48+
@Nullable String stackTrace(@Nullable ThrowableProxy throwableProxy) {
49+
if (throwableProxy == null) {
5150
return null;
5251
}
5352
if (this.stackTracePrinter != null) {
53+
Throwable throwable = throwableProxy.getThrowable();
54+
Assert.state(throwable != null, "Proxy must return Throwable in order to print exception");
5455
return this.stackTracePrinter.printStackTraceToString(throwable);
5556
}
56-
return printStackTrace(throwable);
57-
}
58-
59-
private static String printStackTrace(Throwable throwable) {
60-
StringWriter stringWriter = new StringWriter();
61-
throwable.printStackTrace(new PrintWriter(stringWriter));
62-
return stringWriter.toString();
57+
return throwableProxy.getExtendedStackTraceAsString();
6358
}
6459

6560
}

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/GraylogExtendedLogFormatStructuredLogFormatter.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ private static void jsonMembers(Environment environment, @Nullable StackTracePri
9898
.usingPairs(contextPairs.flat(additionalFieldJoiner(),
9999
GraylogExtendedLogFormatStructuredLogFormatter::addContextDataPairs));
100100
members.add()
101-
.whenNotNull(LogEvent::getThrown)
102-
.usingMembers((thrownMembers) -> throwableMembers(thrownMembers, extractor));
101+
.whenNotNull(LogEvent::getThrownProxy)
102+
.usingMembers((thrownProxyMembers) -> throwableMembers(thrownProxyMembers, extractor));
103103
}
104104

105105
private static String getMessageText(Message message) {
@@ -131,9 +131,11 @@ private static int convertLevel(LogEvent event) {
131131

132132
private static void throwableMembers(Members<LogEvent> members, Extractor extractor) {
133133
members.add("full_message", extractor::messageAndStackTrace);
134-
members.add("_error_type", LogEvent::getThrown).whenNotNull().as(ObjectUtils::nullSafeClassName);
134+
members.add("_error_type", (event) -> event.getThrownProxy().getThrowable())
135+
.whenNotNull()
136+
.as(ObjectUtils::nullSafeClassName);
135137
members.add("_error_stack_trace", extractor::stackTrace);
136-
members.add("_error_message", (event) -> event.getThrown().getMessage());
138+
members.add("_error_message", (event) -> event.getThrownProxy().getMessage());
137139
}
138140

139141
private static void addContextDataPairs(ContextPairs.Pairs<ReadOnlyStringMap> contextPairs) {

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/LogstashStructuredLogFormatter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private static void jsonMembers(@Nullable StackTracePrinter stackTracePrinter, C
6868
.whenNotNull()
6969
.as(LogstashStructuredLogFormatter::getMarkers)
7070
.whenNot(CollectionUtils::isEmpty);
71-
members.add("stack_trace", LogEvent::getThrown).whenNotNull().as(extractor::stackTrace);
71+
members.add("stack_trace", LogEvent::getThrownProxy).whenNotNull().as(extractor::stackTrace);
7272
}
7373

7474
private static String asTimestamp(Instant instant) {

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/SpringProfileArbiter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ private Builder() {
9090
* @return this
9191
* @see Profiles#of(String...)
9292
*/
93-
public Builder setName(String name) {
93+
Builder setName(String name) {
9494
this.name = name;
9595
return this;
9696
}

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/StructuredLogLayout.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,12 @@ static final class Builder implements org.apache.logging.log4j.core.util.Builder
8787
@SuppressWarnings("NullAway.Init")
8888
private String charset = StandardCharsets.UTF_8.name();
8989

90-
public Builder setFormat(String format) {
90+
Builder setFormat(String format) {
9191
this.format = format;
9292
return this;
9393
}
9494

95-
public Builder setCharset(String charset) {
95+
Builder setCharset(String charset) {
9696
this.charset = charset;
9797
return this;
9898
}

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/WhitespaceThrowablePatternConverter.java

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import org.apache.logging.log4j.core.config.Configuration;
2121
import org.apache.logging.log4j.core.config.plugins.Plugin;
2222
import org.apache.logging.log4j.core.pattern.ConverterKeys;
23-
import org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter;
24-
import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
2523
import org.apache.logging.log4j.core.pattern.PatternConverter;
2624
import org.apache.logging.log4j.core.pattern.ThrowablePatternConverter;
2725
import org.jspecify.annotations.Nullable;
@@ -35,33 +33,21 @@
3533
*/
3634
@Plugin(name = "WhitespaceThrowablePatternConverter", category = PatternConverter.CATEGORY)
3735
@ConverterKeys({ "wEx", "wThrowable", "wException" })
38-
public final class WhitespaceThrowablePatternConverter extends LogEventPatternConverter {
36+
public final class WhitespaceThrowablePatternConverter extends ThrowablePatternConverter {
3937

40-
private final ExtendedThrowablePatternConverter delegate;
41-
42-
private final String separator;
43-
44-
@SuppressWarnings("deprecation") // https://github.com/apache/logging-log4j2/issues/3809
45-
private WhitespaceThrowablePatternConverter(Configuration configuration, @Nullable String[] options) {
46-
super("WhitespaceThrowable", "throwable");
47-
this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options);
48-
this.separator = this.delegate.getOptions().getSeparator();
38+
private WhitespaceThrowablePatternConverter(Configuration configuration, String @Nullable [] options) {
39+
super("WhitespaceThrowable", "throwable", options, configuration);
4940
}
5041

5142
@Override
5243
public void format(LogEvent event, StringBuilder buffer) {
5344
if (event.getThrown() != null) {
54-
buffer.append(this.separator);
55-
this.delegate.format(event, buffer);
56-
buffer.append(this.separator);
45+
buffer.append(this.options.getSeparator());
46+
super.format(event, buffer);
47+
buffer.append(this.options.getSeparator());
5748
}
5849
}
5950

60-
@Override
61-
public boolean handlesThrowable() {
62-
return true;
63-
}
64-
6551
/**
6652
* Creates a new instance of the class. Required by Log4J2.
6753
* @param configuration current configuration
@@ -70,7 +56,7 @@ public boolean handlesThrowable() {
7056
* @return a new {@code WhitespaceThrowablePatternConverter}
7157
*/
7258
public static WhitespaceThrowablePatternConverter newInstance(Configuration configuration,
73-
@Nullable String[] options) {
59+
String @Nullable [] options) {
7460
return new WhitespaceThrowablePatternConverter(configuration, options);
7561
}
7662

0 commit comments

Comments
 (0)