Commit 0ce3e7ec authored by Phillip Webb's avatar Phillip Webb

Protect against NPE caused by recursive calls

Update `SpringBootConfigurationFactory` so that it no longer attempts
to get a `LoggingSystem`.

The recent `LoggingSystem` update means makes use of the
`SpringFactoriesLoader` class to load candidate logging systems.
Unfortunately, the `SpringFactoriesLoader` class creates a `Logger`
which (when using Log4J2) causes `SpringBootConfigurationFactory` to
run. Calling `LoggingSystem.get` from `SpringBootConfigurationFactory`
results in a recursive call to `SpringFactoriesLoader` which hasn't
yet been fully initialized. We then see an NPE caused by a `null`
`cache`.

This update removes the call to `LoggingSystem.get` with the assumption
that it would never return `null` anyway.

Fixes gh-24163
parent 33499674
...@@ -24,8 +24,6 @@ import org.apache.logging.log4j.core.config.DefaultConfiguration; ...@@ -24,8 +24,6 @@ import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.config.Order; import org.apache.logging.log4j.core.config.Order;
import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.springframework.boot.logging.LoggingSystem;
/** /**
* Spring Boot {@link ConfigurationFactory} that customizes Log4J2's default configuration * Spring Boot {@link ConfigurationFactory} that customizes Log4J2's default configuration
* to: * to:
...@@ -56,11 +54,10 @@ public class SpringBootConfigurationFactory extends ConfigurationFactory { ...@@ -56,11 +54,10 @@ public class SpringBootConfigurationFactory extends ConfigurationFactory {
@Override @Override
public Configuration getConfiguration(LoggerContext loggerContext, ConfigurationSource source) { public Configuration getConfiguration(LoggerContext loggerContext, ConfigurationSource source) {
if (source != null && source != ConfigurationSource.NULL_SOURCE if (source == null || source == ConfigurationSource.NULL_SOURCE) {
&& LoggingSystem.get(loggerContext.getClass().getClassLoader()) != null) { return null;
return new SpringBootConfiguration();
} }
return null; return new SpringBootConfiguration();
} }
private static final class SpringBootConfiguration extends DefaultConfiguration { private static final class SpringBootConfiguration extends DefaultConfiguration {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment