diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java index 889d702fec0..fd7dbf2607b 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java @@ -17,16 +17,24 @@ package org.apache.logging.log4j.core; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import java.lang.reflect.Field; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.apache.logging.log4j.core.util.ReflectionUtil; +import org.apache.logging.log4j.test.junit.SetTestProperty; import org.junit.jupiter.api.Test; +@SetTestProperty(key = "log4j2.isWebapp", value = "false") @LoggerContextSource("log4j-test3.xml") class ShutdownDisabledTest { @Test - void testShutdownFlag(final Configuration config) { + void testShutdownFlag(final Configuration config, final LoggerContext ctx) throws NoSuchFieldException { + Field shutdownCallback = LoggerContext.class.getDeclaredField("shutdownCallback"); + Object fieldValue = ReflectionUtil.getFieldValue(shutdownCallback, ctx); assertFalse(config.isShutdownHookEnabled(), "Shutdown hook is enabled"); + assertNull(fieldValue, "Shutdown callback is null"); } } 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 5d486c7649d..bf2f77383c0 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 @@ -321,6 +321,8 @@ public void start(final Configuration config) { if (configLock.tryLock()) { try { if (this.isInitialized() || this.isStopped()) { + setStarting(); + reconfigure(config); if (this.configuration.isShutdownHookEnabled()) { setUpShutdownHook(); } @@ -330,7 +332,6 @@ public void start(final Configuration config) { configLock.unlock(); } } - setConfiguration(config); LOGGER.info("{}[name={}] started with configuration {}.", getClass().getSimpleName(), getName(), config); } diff --git a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java index 65bc1163e64..4db51b61653 100644 --- a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java +++ b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java @@ -158,7 +158,7 @@ protected void loadConfiguration(final String location, final LogFile logFile, f final URL url = ResourceUtils.getURL(location); final ConfigurationSource source = getConfigurationSource(url); if (source != null) { - ctx.start(ConfigurationFactory.getInstance().getConfiguration(ctx, source)); + ctx.reconfigure(ConfigurationFactory.getInstance().getConfiguration(ctx, source)); } } else { final List<AbstractConfiguration> configs = new ArrayList<>(); @@ -189,9 +189,9 @@ protected void loadConfiguration(final String location, final LogFile logFile, f first = false; } if (configs.size() > 1) { - ctx.start(new CompositeConfiguration(configs)); + ctx.reconfigure(new CompositeConfiguration(configs)); } else { - ctx.start(configs.get(0)); + ctx.reconfigure(configs.get(0)); } } } catch (Exception ex) {