Ignore unresolvable placeholder in log properties
Update the RelaxedPropertyResolver used to load log properties so that
`${...}` patterns are ignored when possible.
Fixes gh-7719
This commit is contained in:
@@ -19,7 +19,9 @@ package org.springframework.boot.bind;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.env.PropertyResolver;
|
||||
import org.springframework.core.env.PropertySourcesPropertyResolver;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
@@ -145,4 +147,25 @@ public class RelaxedPropertyResolver implements PropertyResolver {
|
||||
keyPrefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a property resolver for the environment, preferring one that ignores
|
||||
* unresolvable nested placeholders.
|
||||
* @param environment the source environment
|
||||
* @param prefix the prefix
|
||||
* @return a property resolver for the environment
|
||||
* @since 1.4.3
|
||||
*/
|
||||
public static RelaxedPropertyResolver ignoringUnresolvableNestedPlaceholders(
|
||||
Environment environment, String prefix) {
|
||||
Assert.notNull(environment, "Environment must not be null");
|
||||
PropertyResolver resolver = environment;
|
||||
if (environment instanceof ConfigurableEnvironment) {
|
||||
resolver = new PropertySourcesPropertyResolver(
|
||||
((ConfigurableEnvironment) environment).getPropertySources());
|
||||
((PropertySourcesPropertyResolver) resolver)
|
||||
.setIgnoreUnresolvableNestedPlaceholders(true);
|
||||
}
|
||||
return new RelaxedPropertyResolver(resolver, prefix);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -49,8 +49,8 @@ class LoggingSystemProperties {
|
||||
}
|
||||
|
||||
public void apply(LogFile logFile) {
|
||||
RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver(
|
||||
this.environment, "logging.");
|
||||
RelaxedPropertyResolver propertyResolver = RelaxedPropertyResolver
|
||||
.ignoringUnresolvableNestedPlaceholders(this.environment, "logging.");
|
||||
setSystemProperty(propertyResolver, EXCEPTION_CONVERSION_WORD,
|
||||
"exception-conversion-word");
|
||||
setSystemProperty(propertyResolver, CONSOLE_LOG_PATTERN, "pattern.console");
|
||||
|
||||
@@ -72,7 +72,8 @@ class DefaultLogbackConfiguration {
|
||||
if (environment == null) {
|
||||
return new PropertySourcesPropertyResolver(null);
|
||||
}
|
||||
return new RelaxedPropertyResolver(environment, "logging.pattern.");
|
||||
return RelaxedPropertyResolver.ignoringUnresolvableNestedPlaceholders(environment,
|
||||
"logging.pattern.");
|
||||
}
|
||||
|
||||
public void apply(LogbackConfigurator config) {
|
||||
|
||||
@@ -467,6 +467,16 @@ public class LoggingApplicationListenerTests {
|
||||
assertThat(System.getProperty("PID")).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void environmentPropertiesIgnoreUnresolvablePlaceholders() {
|
||||
// gh-7719
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.pattern.console=console ${pid}");
|
||||
this.initializer.initialize(this.context.getEnvironment(),
|
||||
this.context.getClassLoader());
|
||||
assertThat(System.getProperty("CONSOLE_LOG_PATTERN")).isEqualTo("console ${pid}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void logFilePropertiesCanReferenceSystemProperties() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
|
||||
Reference in New Issue
Block a user