diff --git a/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java b/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java index 6122c5499f9..4c63db9403e 100644 --- a/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java +++ b/spring-boot/src/main/java/org/springframework/boot/logging/LoggingApplicationListener.java @@ -247,16 +247,18 @@ public class LoggingApplicationListener implements GenericApplicationListener { */ protected void initialize(ConfigurableEnvironment environment, ClassLoader classLoader) { + setSystemProperties(environment); LogFile logFile = LogFile.get(environment); - setSystemProperties(environment, logFile); + if (logFile != null) { + logFile.applyToSystemProperties(); + } initializeEarlyLoggingLevel(environment); initializeSystem(environment, this.loggingSystem, logFile); initializeFinalLoggingLevels(environment, this.loggingSystem); registerShutdownHookIfNecessary(environment, this.loggingSystem); } - private void setSystemProperties(ConfigurableEnvironment environment, - LogFile logFile) { + private void setSystemProperties(ConfigurableEnvironment environment) { RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver( environment, "logging."); setSystemProperty(propertyResolver, EXCEPTION_CONVERSION_WORD, @@ -265,9 +267,6 @@ public class LoggingApplicationListener implements GenericApplicationListener { setSystemProperty(propertyResolver, FILE_LOG_PATTERN, "pattern.file"); setSystemProperty(propertyResolver, LOG_LEVEL_PATTERN, "pattern.level"); setSystemProperty(PID_KEY, new ApplicationPid().toString()); - if (logFile != null) { - logFile.applyToSystemProperties(); - } } private void setSystemProperty(RelaxedPropertyResolver propertyResolver, diff --git a/spring-boot/src/test/java/org/springframework/boot/logging/LoggingApplicationListenerTests.java b/spring-boot/src/test/java/org/springframework/boot/logging/LoggingApplicationListenerTests.java index 4b3868c3985..a908cd98449 100644 --- a/spring-boot/src/test/java/org/springframework/boot/logging/LoggingApplicationListenerTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/logging/LoggingApplicationListenerTests.java @@ -35,6 +35,7 @@ import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; import org.slf4j.bridge.SLF4JBridgeHandler; +import org.springframework.boot.ApplicationPid; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.boot.logging.java.JavaLoggingSystem; @@ -430,6 +431,16 @@ public class LoggingApplicationListenerTests { assertThat(System.getProperty("PID")).isNotNull(); } + @Test + public void logFilePropertiesCanReferenceSystemProperties() { + EnvironmentTestUtils.addEnvironment(this.context, + "logging.file=target/${PID}.log"); + this.initializer.initialize(this.context.getEnvironment(), + this.context.getClassLoader()); + assertThat(System.getProperty("LOG_FILE")) + .isEqualTo("target/" + new ApplicationPid().toString() + ".log"); + } + private boolean bridgeHandlerInstalled() { Logger rootLogger = LogManager.getLogManager().getLogger(""); Handler[] handlers = rootLogger.getHandlers();