Skip to content

Commit 222a09c

Browse files
committed
Make ROOT logger name case-insensitive when setting log level
Fixes gh-9693
1 parent 96b1a85 commit 222a09c

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -341,17 +341,23 @@ protected void initializeLogLevel(LoggingSystem system, LogLevel level) {
341341
protected void setLogLevels(LoggingSystem system, Environment environment) {
342342
Map<String, Object> levels = new RelaxedPropertyResolver(environment)
343343
.getSubProperties("logging.level.");
344+
boolean rootProcessed = false;
344345
for (Entry<String, Object> entry : levels.entrySet()) {
345-
setLogLevel(system, environment, entry.getKey(), entry.getValue().toString());
346+
String name = entry.getKey();
347+
if (name.equalsIgnoreCase(LoggingSystem.ROOT_LOGGER_NAME)) {
348+
if (rootProcessed) {
349+
return;
350+
}
351+
name = null;
352+
rootProcessed = true;
353+
}
354+
setLogLevel(system, environment, name, entry.getValue().toString());
346355
}
347356
}
348357

349358
private void setLogLevel(LoggingSystem system, Environment environment, String name,
350359
String level) {
351360
try {
352-
if (name.equalsIgnoreCase(LoggingSystem.ROOT_LOGGER_NAME)) {
353-
name = null;
354-
}
355361
level = environment.resolvePlaceholders(level);
356362
system.setLogLevel(name, coerceLogLevel(level));
357363
}

spring-boot/src/test/java/org/springframework/boot/logging/LoggingApplicationListenerTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.io.File;
2020
import java.io.IOException;
21+
import java.util.Collections;
2122
import java.util.List;
2223
import java.util.concurrent.CountDownLatch;
2324
import java.util.concurrent.TimeUnit;
@@ -47,6 +48,8 @@
4748
import org.springframework.context.event.ContextClosedEvent;
4849
import org.springframework.context.event.SimpleApplicationEventMulticaster;
4950
import org.springframework.context.support.GenericApplicationContext;
51+
import org.springframework.core.env.MapPropertySource;
52+
import org.springframework.core.env.MutablePropertySources;
5053
import org.springframework.test.context.support.TestPropertySourceUtils;
5154
import org.springframework.test.util.ReflectionTestUtils;
5255

@@ -481,6 +484,17 @@ public void environmentPropertiesIgnoreUnresolvablePlaceholders() {
481484
assertThat(System.getProperty("CONSOLE_LOG_PATTERN")).isEqualTo("console ${pid}");
482485
}
483486

487+
@Test
488+
public void lowPriorityPropertySourceShouldNotOverrideRootLoggerConfig() throws Exception {
489+
MutablePropertySources propertySources = this.context.getEnvironment().getPropertySources();
490+
propertySources.addFirst(new MapPropertySource("test1", Collections.<String, Object>singletonMap("logging.level.ROOT", "DEBUG")));
491+
propertySources.addLast(new MapPropertySource("test2", Collections.<String, Object>singletonMap("logging.level.root", "WARN")));
492+
this.initializer.initialize(this.context.getEnvironment(),
493+
this.context.getClassLoader());
494+
this.logger.debug("testatdebug");
495+
assertThat(this.outputCapture.toString()).contains("testatdebug");
496+
}
497+
484498
@Test
485499
public void logFilePropertiesCanReferenceSystemProperties() {
486500
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,

0 commit comments

Comments
 (0)