Skip to content

Commit

Permalink
Protect against NPE caused by recursive calls
Browse files Browse the repository at this point in the history
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
  • Loading branch information
philwebb committed Nov 18, 2020
1 parent 3349967 commit 0ce3e7e
Showing 1 changed file with 3 additions and 6 deletions.
Expand Up @@ -24,8 +24,6 @@
import org.apache.logging.log4j.core.config.Order;
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
* to:
Expand Down Expand Up @@ -56,11 +54,10 @@ protected String[] getSupportedTypes() {

@Override
public Configuration getConfiguration(LoggerContext loggerContext, ConfigurationSource source) {
if (source != null && source != ConfigurationSource.NULL_SOURCE
&& LoggingSystem.get(loggerContext.getClass().getClassLoader()) != null) {
return new SpringBootConfiguration();
if (source == null || source == ConfigurationSource.NULL_SOURCE) {
return null;
}
return null;
return new SpringBootConfiguration();
}

private static final class SpringBootConfiguration extends DefaultConfiguration {
Expand Down

0 comments on commit 0ce3e7e

Please sign in to comment.