diff --git a/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystem.java b/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystem.java index 4f88f3ad45..4bcc9c5909 100644 --- a/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystem.java +++ b/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystem.java @@ -125,13 +125,13 @@ public class Log4J2LoggingSystem extends Slf4JLoggingSystem { @Override public void beforeInitialize() { super.beforeInitialize(); - getLoggerConfig(null).addFilter(FILTER); + getRootLoggerConfig().addFilter(FILTER); } @Override public void initialize(LoggingInitializationContext initializationContext, String configLocation, LogFile logFile) { - getLoggerConfig(null).removeFilter(FILTER); + getRootLoggerConfig().removeFilter(FILTER); super.initialize(initializationContext, configLocation, logFile); } @@ -183,15 +183,25 @@ public class Log4J2LoggingSystem extends Slf4JLoggingSystem { } @Override - public void setLogLevel(String loggerName, LogLevel level) { - getLoggerConfig(loggerName).setLevel(LEVELS.get(level)); + public void setLogLevel(String loggerName, LogLevel logLevel) { + Level level = LEVELS.get(logLevel); + LoggerConfig loggerConfig = getLoggerConfig(loggerName); + if (loggerConfig == null) { + loggerConfig = new LoggerConfig(loggerName, level, true); + getLoggerContext().getConfiguration().addLogger(loggerName, loggerConfig); + } + else { + loggerConfig.setLevel(level); + } getLoggerContext().updateLoggers(); } + private LoggerConfig getRootLoggerConfig() { + return getLoggerContext().getConfiguration().getLoggerConfig(""); + } + private LoggerConfig getLoggerConfig(String loggerName) { - LoggerConfig loggerConfig = getLoggerContext().getConfiguration() - .getLoggerConfig(loggerName == null ? "" : loggerName); - return loggerConfig; + return getLoggerContext().getConfiguration().getLoggers().get(loggerName); } private LoggerContext getLoggerContext() { diff --git a/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java b/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java index 025031331a..2d26aba28b 100644 --- a/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java @@ -36,12 +36,13 @@ import org.springframework.util.StringUtils; import com.fasterxml.jackson.databind.ObjectMapper; +import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.Matchers.arrayContaining; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.core.StringContains.containsString; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -130,6 +131,17 @@ public class Log4J2LoggingSystemTests extends AbstractLoggingSystemTests { equalTo(1)); } + @Test + public void setLevelOfUnconfiguredLoggerDoesNotAffectRootConfiguration() + throws Exception { + this.loggingSystem.beforeInitialize(); + this.loggingSystem.initialize(null, null, null); + LogManager.getRootLogger().debug("Hello"); + this.loggingSystem.setLogLevel("foo.bar.baz", LogLevel.DEBUG); + LogManager.getRootLogger().debug("Hello"); + assertThat(this.output.toString(), not(containsString("Hello"))); + } + @Test @Ignore("Fails on Bamboo") public void loggingThatUsesJulIsCaptured() {