From f09d64513626494dc46b42ac75d0013cc6cb8af8 Mon Sep 17 00:00:00 2001 From: Mark Chesney Date: Fri, 16 Aug 2024 01:01:18 -0700 Subject: [PATCH 1/2] Upgrade to Logback 1.5.7 See gh-41885 --- .../spring-boot-dependencies/build.gradle | 2 +- .../logging/logback/DefaultLogbackConfiguration.java | 9 ++++++++- .../boot/logging/logback/LogbackConfigurator.java | 4 +++- .../LogbackLoggingSystemParallelInitializationTests.java | 2 ++ .../boot/logging/logback/LogbackLoggingSystemTests.java | 5 ++++- .../logback/SpringBootJoranConfiguratorTests.java | 2 ++ 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index c16c9eaf2b..d178e5c327 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 abba6c24c4..6712419f81 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 @@ -17,6 +17,7 @@ package org.springframework.boot.logging.logback; import java.nio.charset.Charset; +import java.util.concurrent.locks.ReentrantLock; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; @@ -44,6 +45,7 @@ import org.springframework.boot.logging.LogFile; * @author Robert Thornton * @author Scott Frederick * @author Jonatan Ivanov + * @author Mark Chesney */ class DefaultLogbackConfiguration { @@ -54,7 +56,9 @@ class DefaultLogbackConfiguration { } void apply(LogbackConfigurator config) { - synchronized (config.getConfigurationLock()) { + ReentrantLock lock = config.getConfigurationLock(); + lock.lock(); + try { defaults(config); Appender consoleAppender = consoleAppender(config); if (this.logFile != null) { @@ -65,6 +69,9 @@ class DefaultLogbackConfiguration { config.root(Level.INFO, consoleAppender); } } + finally { + lock.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 b57e5d80db..e557c1724c 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; @@ -35,6 +36,7 @@ import org.springframework.util.Assert; * Allows programmatic configuration of logback which is usually faster than parsing XML. * * @author Phillip Webb + * @author Mark Chesney */ class LogbackConfigurator { @@ -49,7 +51,7 @@ class LogbackConfigurator { return this.context; } - Object getConfigurationLock() { + ReentrantLock getConfigurationLock() { return this.context.getConfigurationLock(); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java index 4624be2a50..f8a6bda4c7 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java @@ -36,6 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat; * control over how and when the logging system is initialized. * * @author Andy Wilkinson + * @author Mark Chesney */ class LogbackLoggingSystemParallelInitializationTests { @@ -45,6 +46,7 @@ class LogbackLoggingSystemParallelInitializationTests { void cleanUp() { this.loggingSystem.cleanUp(); ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); + ((LoggerContext) LoggerFactory.getILoggerFactory()).reset(); } @Test diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java index 995c25f880..b3e4af667a 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java @@ -44,6 +44,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.ILoggerFactory; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -93,8 +94,9 @@ import static org.mockito.Mockito.times; * @author Scott Frederick * @author Jonatan Ivanov * @author Moritz Halbritter + * @author Mark Chesney */ -@ExtendWith(OutputCaptureExtension.class) +@ExtendWith({ MockitoExtension.class, OutputCaptureExtension.class }) @ClassPathExclusions({ "log4j-core-*.jar", "log4j-api-*.jar" }) class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { @@ -128,6 +130,7 @@ class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { System.getProperties().keySet().retainAll(this.systemPropertyNames); this.loggingSystem.cleanUp(); ((LoggerContext) LoggerFactory.getILoggerFactory()).stop(); + ((LoggerContext) LoggerFactory.getILoggerFactory()).reset(); } @Test 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 beab88321a..d680800ab4 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 @@ -43,6 +43,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Phillip Webb * @author Eddú Meléndez * @author Stephane Nicoll + * @author Mark Chesney */ @ExtendWith(OutputCaptureExtension.class) class SpringBootJoranConfiguratorTests { @@ -72,6 +73,7 @@ class SpringBootJoranConfiguratorTests { @AfterEach void reset() { this.context.stop(); + this.context.reset(); new BasicConfigurator().configure((LoggerContext) LoggerFactory.getILoggerFactory()); } From f9d563476bc786134312a9f78f2abe700577c564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Fri, 16 Aug 2024 14:41:42 +0200 Subject: [PATCH 2/2] Polish "Upgrade to Logback 1.5.7" See gh-41885 --- .../boot/logging/logback/LogbackConfigurator.java | 3 +-- .../LogbackLoggingSystemParallelInitializationTests.java | 1 - .../boot/logging/logback/LogbackLoggingSystemTests.java | 4 +--- .../logging/logback/SpringBootJoranConfiguratorTests.java | 1 - 4 files changed, 2 insertions(+), 7 deletions(-) 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 e557c1724c..a64f1ce1f5 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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,7 +36,6 @@ import org.springframework.util.Assert; * Allows programmatic configuration of logback which is usually faster than parsing XML. * * @author Phillip Webb - * @author Mark Chesney */ class LogbackConfigurator { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java index f8a6bda4c7..0e98609fb1 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemParallelInitializationTests.java @@ -36,7 +36,6 @@ import static org.assertj.core.api.Assertions.assertThat; * control over how and when the logging system is initialized. * * @author Andy Wilkinson - * @author Mark Chesney */ class LogbackLoggingSystemParallelInitializationTests { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java index b3e4af667a..7e398938d8 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java @@ -44,7 +44,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.ILoggerFactory; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -94,9 +93,8 @@ import static org.mockito.Mockito.times; * @author Scott Frederick * @author Jonatan Ivanov * @author Moritz Halbritter - * @author Mark Chesney */ -@ExtendWith({ MockitoExtension.class, OutputCaptureExtension.class }) +@ExtendWith(OutputCaptureExtension.class) @ClassPathExclusions({ "log4j-core-*.jar", "log4j-api-*.jar" }) class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { 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 d680800ab4..28d3c930e7 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 @@ -43,7 +43,6 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Phillip Webb * @author Eddú Meléndez * @author Stephane Nicoll - * @author Mark Chesney */ @ExtendWith(OutputCaptureExtension.class) class SpringBootJoranConfiguratorTests {