This is an automated email from the ASF dual-hosted git repository. pkarwasz pushed a commit to branch fix/3770_LoggerContext_start in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 68952602fc92f5dc1bee9093a5b740cfa50ba1d5 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Sat Jun 21 12:22:08 2025 +0200 fix: Restore Backward Compatibility with Spring Boot Reconfiguration Although Spring Boot never directly starts a `LoggerContext`, its logging system — including our `Log4j2SpringBootLoggingSystem` and equivalents in Spring Boot 2.x and 3.x — has consistently used `LoggerContext.start(Configuration)` for reconfiguration. To maintain backward compatibility with these usages, `start(Configuration)` now falls back to `reconfigure(Configuration)` if the context is already started. Closes #3770 --- .../apache/logging/log4j/core/LoggerContext.java | 30 ++++++++++++++++++---- src/changelog/.2.x.x/3770_LoggerContext_start.xml | 12 +++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java index bf2f77383c..6db471cb87 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java @@ -286,6 +286,16 @@ public class LoggerContext extends AbstractLifeCycle return (LoggerContext) LogManager.getContext(loader, currentContext, configLocation); } + /** + * Starts the context using the configuration specified by {@link #getConfigLocation()}. + * <p> + * If the configuration location is {@code null}, Log4j will search for a configuration file + * using the default classpath resources. For details on the search order and supported formats, + * see the + * <a href="https://logging.apache.org/log4j/2.x/manual/configuration.html#automatic-configuration"> + * Log4j 2 Configuration File Location documentation</a>. + * </p> + */ @Override public void start() { LOGGER.debug("Starting LoggerContext[name={}, {}]...", getName(), this); @@ -312,21 +322,31 @@ public class LoggerContext extends AbstractLifeCycle } /** - * Starts with a specific configuration. - * - * @param config The new Configuration. + * Starts the context using a specific configuration. + * <p> + * <strong>Warning:</strong> For backward compatibility, especially with Spring Boot, + * if the context is already started, this method will fall back to {@link #reconfigure(Configuration)}. + * This behavior is maintained for legacy integrations and may change in future major versions. + * New code should not rely on this fallback. + * </p> + * @param config The new {@link Configuration} to use for this context */ public void start(final Configuration config) { LOGGER.info("Starting {}[name={}] with configuration {}...", getClass().getSimpleName(), getName(), config); if (configLock.tryLock()) { try { - if (this.isInitialized() || this.isStopped()) { + if (isInitialized() || isStopped()) { setStarting(); reconfigure(config); if (this.configuration.isShutdownHookEnabled()) { setUpShutdownHook(); } - this.setStarted(); + setStarted(); + } else { + // Required for Spring Boot integration: + // Both `Log4jSpringBootLoggingSystem` and its Spring Boot 3.x equivalent + // invoke `start()` even during context reconfiguration. + reconfigure(config); } } finally { configLock.unlock(); diff --git a/src/changelog/.2.x.x/3770_LoggerContext_start.xml b/src/changelog/.2.x.x/3770_LoggerContext_start.xml new file mode 100644 index 0000000000..84416d9c54 --- /dev/null +++ b/src/changelog/.2.x.x/3770_LoggerContext_start.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entry xmlns="https://logging.apache.org/xml/ns" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + https://logging.apache.org/xml/ns + https://logging.apache.org/xml/ns/log4j-changelog-0.xsd" + type="fixed"> + <issue id="3770" link="https://github.com/apache/logging-log4j2/issues/3770"/> + <description format="asciidoc"> + Restore backward compatibility with the Spring Boot reconfiguration process. + </description> +</entry>
