Re-initialize logging if Environment changed settings

Fixes gh-273
pull/285/merge
Dave Syer 11 years ago
parent 5c6690f704
commit a26ae0a303

@ -153,16 +153,22 @@ public class LoggingApplicationListener implements SmartApplicationListener {
}
}
boolean environmentChanged = false;
for (Map.Entry<String, String> mapping : ENVIRONMENT_SYSTEM_PROPERTY_MAPPING
.entrySet()) {
if (environment.containsProperty(mapping.getKey())) {
System.setProperty(mapping.getValue(),
environment.getProperty(mapping.getKey()));
environmentChanged = true;
}
}
LoggingSystem system = LoggingSystem.get(classLoader);
if (environmentChanged) {
// Re-initialize the defaults in case the Environment changed
system.beforeInitialize();
}
// User specified configuration
if (environment.containsProperty("logging.config")) {
String value = environment.getProperty("logging.config");

@ -16,6 +16,7 @@
package org.springframework.boot.context.listener;
import java.io.File;
import java.io.IOException;
import java.util.logging.LogManager;
@ -71,6 +72,7 @@ public class LoggingApplicationListenerTests {
JavaLoggingSystem.class.getResourceAsStream("logging.properties"));
this.initializer.onApplicationEvent(new SpringApplicationStartEvent(
new SpringApplication(), NO_ARGS));
new File("target/foo.log").delete();
}
@After
@ -119,25 +121,37 @@ public class LoggingApplicationListenerTests {
public void testAddLogFileProperty() {
EnvironmentTestUtils.addEnvironment(this.context,
"logging.config: classpath:logback-nondefault.xml",
"logging.file: foo.log");
"logging.file: target/foo.log");
this.initializer.initialize(this.context.getEnvironment(),
this.context.getClassLoader());
Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class);
logger.info("Hello world");
String output = this.outputCapture.toString().trim();
assertTrue("Wrong output:\n" + output, output.startsWith("foo.log"));
assertTrue("Wrong output:\n" + output, output.startsWith("target/foo.log"));
}
@Test
public void testAddLogFilePropertyWithDefault() {
assertFalse(new File("target/foo.log").exists());
EnvironmentTestUtils.addEnvironment(this.context, "logging.file: target/foo.log");
this.initializer.initialize(this.context.getEnvironment(),
this.context.getClassLoader());
Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class);
logger.info("Hello world");
assertTrue(new File("target/foo.log").exists());
}
@Test
public void testAddLogPathProperty() {
EnvironmentTestUtils.addEnvironment(this.context,
"logging.config: classpath:logback-nondefault.xml", "logging.path: foo/");
"logging.config: classpath:logback-nondefault.xml",
"logging.path: target/foo/");
this.initializer.initialize(this.context.getEnvironment(),
this.context.getClassLoader());
Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class);
logger.info("Hello world");
String output = this.outputCapture.toString().trim();
assertTrue("Wrong output:\n" + output, output.startsWith("foo/spring.log"));
assertTrue("Wrong output:\n" + output, output.startsWith("target/foo/spring.log"));
}
@Test

Loading…
Cancel
Save