diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index c16c9eaf2b3..d178e5c3279 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1121,7 +1121,7 @@ bom { releaseNotes("https://github.com/apache/logging-log4j2/releases/tag/rel%2F{version}") } } - library("Logback", "1.5.6") { + library("Logback", "1.5.7") { group("ch.qos.logback") { modules = [ "logback-classic", diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java index abba6c24c41..7cc9ffe0fed 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/DefaultLogbackConfiguration.java @@ -54,7 +54,8 @@ class DefaultLogbackConfiguration { } void apply(LogbackConfigurator config) { - synchronized (config.getConfigurationLock()) { + config.getConfigurationLock().lock(); + try { defaults(config); Appender consoleAppender = consoleAppender(config); if (this.logFile != null) { @@ -65,6 +66,9 @@ class DefaultLogbackConfiguration { config.root(Level.INFO, consoleAppender); } } + finally { + config.getConfigurationLock().unlock(); + } } private void defaults(LogbackConfigurator config) { diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackConfigurator.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackConfigurator.java index b57e5d80dbf..b35f3855fc3 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackConfigurator.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackConfigurator.java @@ -18,6 +18,7 @@ package org.springframework.boot.logging.logback; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; @@ -49,7 +50,7 @@ class LogbackConfigurator { return this.context; } - Object getConfigurationLock() { + ReentrantLock getConfigurationLock() { return this.context.getConfigurationLock(); } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java index a4b9fca767d..cddd864a066 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java @@ -237,6 +237,7 @@ public class LogbackLoggingSystem extends AbstractLoggingSystem implements BeanF : new LogbackConfigurator(context); new DefaultLogbackConfiguration(logFile).apply(configurator); context.setPackagingDataEnabled(true); + context.start(); }); } @@ -256,6 +257,7 @@ public class LogbackLoggingSystem extends AbstractLoggingSystem implements BeanF catch (Exception ex) { throw new IllegalStateException("Could not initialize Logback logging from " + location, ex); } + loggerContext.start(); }); reportConfigurationErrorsIfNecessary(loggerContext); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java index beab88321a3..4bcc73127c2 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/SpringBootJoranConfiguratorTests.java @@ -73,6 +73,7 @@ class SpringBootJoranConfiguratorTests { void reset() { this.context.stop(); new BasicConfigurator().configure((LoggerContext) LoggerFactory.getILoggerFactory()); + this.context.start(); } @Test