Merge pull request #15089 from TwinProduction
* pr/15089: Polish "Rename logging.file to logging.file.name" Rename logging.file to logging.file.name
This commit is contained in:
commit
389ab9579f
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -23,6 +23,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
|
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.logging.LogFile;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ConditionContext;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
|
@ -35,6 +36,7 @@ import org.springframework.util.StringUtils;
|
|||
* {@link EnableAutoConfiguration Auto-configuration} for {@link LogFileWebEndpoint}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Christian Carriere-Tisseur
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@Configuration
|
||||
|
@ -56,20 +58,23 @@ public class LogFileWebEndpointAutoConfiguration {
|
|||
|
||||
private static class LogFileCondition extends SpringBootCondition {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public ConditionOutcome getMatchOutcome(ConditionContext context,
|
||||
AnnotatedTypeMetadata metadata) {
|
||||
Environment environment = context.getEnvironment();
|
||||
String config = environment.resolvePlaceholders("${logging.file:}");
|
||||
String config = getLogFileConfig(environment, LogFile.FILE_NAME_PROPERTY,
|
||||
LogFile.FILE_PROPERTY);
|
||||
ConditionMessage.Builder message = ConditionMessage.forCondition("Log File");
|
||||
if (StringUtils.hasText(config)) {
|
||||
return ConditionOutcome
|
||||
.match(message.found("logging.file").items(config));
|
||||
.match(message.found(LogFile.FILE_NAME_PROPERTY).items(config));
|
||||
}
|
||||
config = environment.resolvePlaceholders("${logging.path:}");
|
||||
config = getLogFileConfig(environment, LogFile.FILE_PATH_PROPERTY,
|
||||
LogFile.PATH_PROPERTY);
|
||||
if (StringUtils.hasText(config)) {
|
||||
return ConditionOutcome
|
||||
.match(message.found("logging.path").items(config));
|
||||
.match(message.found(LogFile.FILE_PATH_PROPERTY).items(config));
|
||||
}
|
||||
config = environment.getProperty("management.endpoint.logfile.external-file");
|
||||
if (StringUtils.hasText(config)) {
|
||||
|
@ -80,6 +85,15 @@ public class LogFileWebEndpointAutoConfiguration {
|
|||
return ConditionOutcome.noMatch(message.didNotFind("logging file").atAll());
|
||||
}
|
||||
|
||||
private String getLogFileConfig(Environment environment, String configName,
|
||||
String deprecatedConfigName) {
|
||||
String config = environment.resolvePlaceholders("${" + configName + ":}");
|
||||
if (StringUtils.hasText(config)) {
|
||||
return config;
|
||||
}
|
||||
return environment.resolvePlaceholders("${" + deprecatedConfigName + ":}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@TestPropertySource(properties = "logging.file=src/test/resources/org/springframework/boot/actuate/autoconfigure/endpoint/web/documentation/sample.log")
|
||||
@TestPropertySource(properties = "logging.file.name=src/test/resources/org/springframework/boot/actuate/autoconfigure/endpoint/web/documentation/sample.log")
|
||||
public class LogFileWebEndpointDocumentationTests
|
||||
extends MockMvcEndpointDocumentationTests {
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
* @author Andy Wilkinson
|
||||
* @author Stephane Nicoll
|
||||
* @author Phillip Webb
|
||||
* @author Christian Carriere-Tisseur
|
||||
*/
|
||||
public class LogFileWebEndpointAutoConfigurationTests {
|
||||
|
||||
|
@ -49,12 +50,26 @@ public class LogFileWebEndpointAutoConfigurationTests {
|
|||
|
||||
@Test
|
||||
public void logFileWebEndpointIsAutoConfiguredWhenLoggingFileIsSet() {
|
||||
this.contextRunner.withPropertyValues("logging.file.name:test.log").run(
|
||||
(context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void logFileWebEndpointIsAutoConfiguredWhenLoggingFileIsSetWithDeprecatedProperty() {
|
||||
this.contextRunner.withPropertyValues("logging.file:test.log").run(
|
||||
(context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void logFileWebEndpointIsAutoConfiguredWhenLoggingPathIsSet() {
|
||||
this.contextRunner.withPropertyValues("logging.file.path:test/logs").run(
|
||||
(context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void logFileWebEndpointIsAutoConfiguredWhenLoggingPathIsSetWithDeprecatedProperty() {
|
||||
this.contextRunner.withPropertyValues("logging.path:test/logs").run(
|
||||
(context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class));
|
||||
}
|
||||
|
@ -71,7 +86,7 @@ public class LogFileWebEndpointAutoConfigurationTests {
|
|||
@Test
|
||||
public void logFileWebEndpointCanBeDisabled() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("logging.file:test.log",
|
||||
.withPropertyValues("logging.file.name:test.log",
|
||||
"management.endpoint.logfile.enabled:false")
|
||||
.run((context) -> assertThat(context)
|
||||
.hasSingleBean(LogFileWebEndpoint.class));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -70,7 +70,7 @@ public class LogFileWebEndpoint {
|
|||
}
|
||||
LogFile logFile = LogFile.get(this.environment);
|
||||
if (logFile == null) {
|
||||
logger.debug("Missing 'logging.file' or 'logging.path' properties");
|
||||
logger.debug("Missing 'logging.file.name' or 'logging.file.path' properties");
|
||||
return null;
|
||||
}
|
||||
return new FileSystemResource(logFile.toString());
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -63,12 +63,22 @@ public class LogFileWebEndpointTests {
|
|||
|
||||
@Test
|
||||
public void nullResponseWithMissingLogFile() {
|
||||
this.environment.setProperty("logging.file", "no_test.log");
|
||||
this.environment.setProperty("logging.file.name", "no_test.log");
|
||||
assertThat(this.endpoint.logFile()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resourceResponseWithLogFile() throws Exception {
|
||||
this.environment.setProperty("logging.file.name", this.logFile.getAbsolutePath());
|
||||
Resource resource = this.endpoint.logFile();
|
||||
assertThat(resource).isNotNull();
|
||||
assertThat(StreamUtils.copyToString(resource.getInputStream(),
|
||||
StandardCharsets.UTF_8)).isEqualTo("--TEST--");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void resourceResponseWithLogFileAndDeprecatedProperty() throws Exception {
|
||||
this.environment.setProperty("logging.file", this.logFile.getAbsolutePath());
|
||||
Resource resource = this.endpoint.logFile();
|
||||
assertThat(resource).isNotNull();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -65,7 +65,7 @@ public class LogFileWebEndpointWebIntegrationTests {
|
|||
|
||||
@Test
|
||||
public void getRequestProducesResponseWithLogFile() {
|
||||
TestPropertyValues.of("logging.file:" + this.logFile.getAbsolutePath())
|
||||
TestPropertyValues.of("logging.file.name:" + this.logFile.getAbsolutePath())
|
||||
.applyTo(context);
|
||||
client.get().uri("/actuator/logfile").exchange().expectStatus().isOk()
|
||||
.expectBody(String.class).isEqualTo("--TEST--");
|
||||
|
|
|
@ -37,12 +37,12 @@ content into your application. Rather, pick only the properties that you need.
|
|||
# LOGGING
|
||||
logging.config= # Location of the logging configuration file. For instance, `classpath:logback.xml` for Logback.
|
||||
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
|
||||
logging.file= # Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.
|
||||
logging.file.max-history=0 # Maximum of archive log files to keep. Only supported with the default logback setup.
|
||||
logging.file.max-size=10MB # Maximum log file size. Only supported with the default logback setup.
|
||||
logging.file.name= # Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.
|
||||
logging.file.path= # Location of the log file. For instance, `/var/log`.
|
||||
logging.group.*= # Log groups to quickly change multiple loggers at the same time. For instance, `logging.level.db=org.hibernate,org.springframework.jdbc`.
|
||||
logging.level.*= # Log levels severity mapping. For instance, `logging.level.org.springframework=DEBUG`.
|
||||
logging.path= # Location of the log file. For instance, `/var/log`.
|
||||
logging.pattern.console= # Appender pattern for output to the console. Supported only with the default Logback setup.
|
||||
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS # Appender pattern for log date format. Supported only with the default Logback setup.
|
||||
logging.pattern.file= # Appender pattern for output to a file. Supported only with the default Logback setup.
|
||||
|
|
|
@ -1518,7 +1518,7 @@ in the following example:
|
|||
----
|
||||
|
||||
You can also set the location of a file to which to write the log (in addition to the
|
||||
console) by using "logging.file".
|
||||
console) by using "logging.file.name".
|
||||
|
||||
To configure the more fine-grained settings of a logging system, you need to use the native
|
||||
configuration format supported by the `LoggingSystem` in question. By default, Spring Boot
|
||||
|
@ -1548,8 +1548,8 @@ If you look at `base.xml` in the spring-boot jar, you can see that it uses
|
|||
some useful System properties that the `LoggingSystem` takes care of creating for you:
|
||||
|
||||
* `${PID}`: The current process ID.
|
||||
* `${LOG_FILE}`: Whether `logging.file` was set in Boot's external configuration.
|
||||
* `${LOG_PATH}`: Whether `logging.path` (representing a directory for
|
||||
* `${LOG_FILE}`: Whether `logging.file.name` was set in Boot's external configuration.
|
||||
* `${LOG_PATH}`: Whether `logging.file.path` (representing a directory for
|
||||
log files to live in) was set in Boot's external configuration.
|
||||
* `${LOG_EXCEPTION_CONVERSION_WORD}`: Whether `logging.exception-conversion-word` was set
|
||||
in Boot's external configuration.
|
||||
|
@ -1582,12 +1582,12 @@ shown in the following example:
|
|||
</configuration>
|
||||
----
|
||||
|
||||
You also need to add `logging.file` to your `application.properties`, as shown in the
|
||||
You also need to add `logging.file.name` to your `application.properties`, as shown in the
|
||||
following example:
|
||||
|
||||
[source,properties,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
logging.file=myapplication.log
|
||||
logging.file.name=myapplication.log
|
||||
----
|
||||
|
||||
|
||||
|
|
|
@ -164,9 +164,9 @@ use the following additional endpoints:
|
|||
|Yes
|
||||
|
||||
|`logfile`
|
||||
|Returns the contents of the logfile (if `logging.file` or `logging.path` properties have
|
||||
been set). Supports the use of the HTTP `Range` header to retrieve part of the log file's
|
||||
content.
|
||||
|Returns the contents of the logfile (if `logging.file.name` or `logging.file.path`
|
||||
properties have been set). Supports the use of the HTTP `Range` header to retrieve part of
|
||||
the log file's content.
|
||||
|Yes
|
||||
|
||||
|`prometheus`
|
||||
|
|
|
@ -1686,7 +1686,7 @@ The following colors and styles are supported:
|
|||
=== File Output
|
||||
By default, Spring Boot logs only to the console and does not write log files. If you
|
||||
want to write log files in addition to the console output, you need to set a
|
||||
`logging.file` or `logging.path` property (for example, in your
|
||||
`logging.file.name` or `logging.file.path` property (for example, in your
|
||||
`application.properties`).
|
||||
|
||||
The following table shows how the `logging.*` properties can be used together:
|
||||
|
@ -1694,7 +1694,7 @@ The following table shows how the `logging.*` properties can be used together:
|
|||
.Logging properties
|
||||
[cols="1,1,1,4"]
|
||||
|===
|
||||
|`logging.file` |`logging.path` |Example |Description
|
||||
|`logging.file.name` |`logging.file.path` |Example |Description
|
||||
|
||||
|_(none)_
|
||||
|_(none)_
|
||||
|
@ -1835,7 +1835,7 @@ To help with the customization, some other properties are transferred from the S
|
|||
|`LOG_EXCEPTION_CONVERSION_WORD`
|
||||
|The conversion word used when logging exceptions.
|
||||
|
||||
|`logging.file`
|
||||
|`logging.file.name`
|
||||
|`LOG_FILE`
|
||||
|If defined, it is used in the default log configuration.
|
||||
|
||||
|
@ -1849,7 +1849,7 @@ setup.)
|
|||
|Maximum number of archive log files to keep (if LOG_FILE enabled). (Only supported with
|
||||
the default Logback setup.)
|
||||
|
||||
|`logging.path`
|
||||
|`logging.file.path`
|
||||
|`LOG_PATH`
|
||||
|If defined, it is used in the default log configuration.
|
||||
|
||||
|
|
|
@ -68,8 +68,8 @@ import org.springframework.util.StringUtils;
|
|||
* {@literal java -jar myapp.jar [--debug | --trace]}). If you prefer to ignore these
|
||||
* properties you can set {@link #setParseArgs(boolean) parseArgs} to {@code false}.
|
||||
* <p>
|
||||
* By default, log output is only written to the console. If a log file is required the
|
||||
* {@code logging.path} and {@code logging.file} properties can be used.
|
||||
* By default, log output is only written to the console. If a log file is required, the
|
||||
* {@code logging.file.path} and {@code logging.file.name} properties can be used.
|
||||
* <p>
|
||||
* Some system properties may be set as side effects, and these can be useful if the
|
||||
* logging configuration supports placeholders (i.e. log4j or logback):
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -25,11 +25,12 @@ import org.springframework.util.StringUtils;
|
|||
|
||||
/**
|
||||
* A reference to a log output file. Log output files are specified using
|
||||
* {@code logging.file} or {@code logging.path} {@link Environment} properties. If the
|
||||
* {@code logging.file} property is not specified {@code "spring.log"} will be written in
|
||||
* the {@code logging.path} directory.
|
||||
* {@code logging.file.name} or {@code logging.file.path} {@link Environment} properties.
|
||||
* If the {@code logging.file.name} property is not specified {@code "spring.log"} will be
|
||||
* written in the {@code logging.file.path} directory.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @author Christian Carriere-Tisseur
|
||||
* @since 1.2.1
|
||||
* @see #get(PropertyResolver)
|
||||
*/
|
||||
|
@ -38,15 +39,33 @@ public class LogFile {
|
|||
/**
|
||||
* The name of the Spring property that contains the name of the log file. Names can
|
||||
* be an exact location or relative to the current directory.
|
||||
* @deprecated since 2.2.0 in favor of {@link #FILE_NAME_PROPERTY}
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String FILE_PROPERTY = "logging.file";
|
||||
|
||||
/**
|
||||
* The name of the Spring property that contains the directory where log files are
|
||||
* written.
|
||||
* @deprecated since 2.2.0 in favor of {@link #FILE_PATH_PROPERTY}
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_PROPERTY = "logging.path";
|
||||
|
||||
/**
|
||||
* The name of the Spring property that contains the name of the log file. Names can
|
||||
* be an exact location or relative to the current directory.
|
||||
* @since 2.2.0
|
||||
*/
|
||||
public static final String FILE_NAME_PROPERTY = "logging.file.name";
|
||||
|
||||
/**
|
||||
* The name of the Spring property that contains the directory where log files are
|
||||
* written.
|
||||
* @since 2.2.0
|
||||
*/
|
||||
public static final String FILE_PATH_PROPERTY = "logging.file.path";
|
||||
|
||||
private final String file;
|
||||
|
||||
private final String path;
|
||||
|
@ -112,13 +131,25 @@ public class LogFile {
|
|||
* @return a {@link LogFile} or {@code null} if the environment didn't contain any
|
||||
* suitable properties
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static LogFile get(PropertyResolver propertyResolver) {
|
||||
String file = propertyResolver.getProperty(FILE_PROPERTY);
|
||||
String path = propertyResolver.getProperty(PATH_PROPERTY);
|
||||
String file = getLogFileProperty(propertyResolver, FILE_NAME_PROPERTY,
|
||||
FILE_PROPERTY);
|
||||
String path = getLogFileProperty(propertyResolver, FILE_PATH_PROPERTY,
|
||||
PATH_PROPERTY);
|
||||
if (StringUtils.hasLength(file) || StringUtils.hasLength(path)) {
|
||||
return new LogFile(file, path);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static String getLogFileProperty(PropertyResolver propertyResolver,
|
||||
String propertyName, String deprecatedPropertyName) {
|
||||
String property = propertyResolver.getProperty(propertyName);
|
||||
if (property != null) {
|
||||
return property;
|
||||
}
|
||||
return propertyResolver.getProperty(deprecatedPropertyName);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -71,6 +71,21 @@
|
|||
"name": "logging.file",
|
||||
"type": "java.lang.String",
|
||||
"description": "Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.",
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener",
|
||||
"deprecation": {
|
||||
"replacement": "logging.file.name"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "logging.file.name",
|
||||
"type": "java.lang.String",
|
||||
"description": "Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.",
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener"
|
||||
},
|
||||
{
|
||||
"name": "logging.file.path",
|
||||
"type": "java.lang.String",
|
||||
"description": "Location of the log file. For instance, `/var/log`.",
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener"
|
||||
},
|
||||
{
|
||||
|
@ -103,7 +118,10 @@
|
|||
"name": "logging.path",
|
||||
"type": "java.lang.String",
|
||||
"description": "Location of the log file. For instance, `/var/log`.",
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener"
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener",
|
||||
"deprecation": {
|
||||
"replacement": "logging.file.path"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "logging.pattern.console",
|
||||
|
|
|
@ -100,13 +100,13 @@ public class SpringApplicationBuilderTests {
|
|||
public void propertiesWithRepeatSeparator() {
|
||||
SpringApplicationBuilder application = new SpringApplicationBuilder()
|
||||
.sources(ExampleConfig.class).contextClass(StaticApplicationContext.class)
|
||||
.properties("one=c:\\logging.file", "two=a:b", "three:c:\\logging.file",
|
||||
"four:a:b");
|
||||
.properties("one=c:\\logging.file.name", "two=a:b",
|
||||
"three:c:\\logging.file.name", "four:a:b");
|
||||
this.context = application.run();
|
||||
ConfigurableEnvironment environment = this.context.getEnvironment();
|
||||
assertThat(environment.getProperty("one")).isEqualTo("c:\\logging.file");
|
||||
assertThat(environment.getProperty("one")).isEqualTo("c:\\logging.file.name");
|
||||
assertThat(environment.getProperty("two")).isEqualTo("a:b");
|
||||
assertThat(environment.getProperty("three")).isEqualTo("c:\\logging.file");
|
||||
assertThat(environment.getProperty("three")).isEqualTo("c:\\logging.file.name");
|
||||
assertThat(environment.getProperty("four")).isEqualTo("a:b");
|
||||
}
|
||||
|
||||
|
|
|
@ -211,6 +211,22 @@ public class LoggingApplicationListenerTests {
|
|||
|
||||
@Test
|
||||
public void addLogFileProperty() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.config=classpath:logback-nondefault.xml",
|
||||
"logging.file.name=target/foo.log");
|
||||
this.initializer.initialize(this.context.getEnvironment(),
|
||||
this.context.getClassLoader());
|
||||
Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class);
|
||||
String existingOutput = this.outputCapture.toString();
|
||||
logger.info("Hello world");
|
||||
String output = this.outputCapture.toString().substring(existingOutput.length())
|
||||
.trim();
|
||||
assertThat(output).startsWith("target/foo.log");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void addLogFilePropertyWithDeprecatedProperty() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.config=classpath:logback-nondefault.xml",
|
||||
"logging.file=target/foo.log");
|
||||
|
@ -226,6 +242,19 @@ public class LoggingApplicationListenerTests {
|
|||
|
||||
@Test
|
||||
public void addLogFilePropertyWithDefault() {
|
||||
assertThat(new File("target/foo.log").exists()).isFalse();
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.file.name=target/foo.log");
|
||||
this.initializer.initialize(this.context.getEnvironment(),
|
||||
this.context.getClassLoader());
|
||||
Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class);
|
||||
logger.info("Hello world");
|
||||
assertThat(new File("target/foo.log").exists()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void addLogFilePropertyWithDefaultAndDeprecatedProperty() {
|
||||
assertThat(new File("target/foo.log").exists()).isFalse();
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.file=target/foo.log");
|
||||
|
@ -238,6 +267,21 @@ public class LoggingApplicationListenerTests {
|
|||
|
||||
@Test
|
||||
public void addLogPathProperty() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.config=classpath:logback-nondefault.xml",
|
||||
"logging.file.path=target/foo/");
|
||||
this.initializer.initialize(this.context.getEnvironment(),
|
||||
this.context.getClassLoader());
|
||||
Log logger = LogFactory.getLog(LoggingApplicationListenerTests.class);
|
||||
String existingOutput = this.outputCapture.toString();
|
||||
logger.info("Hello world");
|
||||
String output = this.outputCapture.toString().substring(existingOutput.length())
|
||||
.trim();
|
||||
assertThat(output).startsWith("target/foo/spring.log");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addLogPathPropertyWithDeprecatedProperty() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.config=classpath:logback-nondefault.xml",
|
||||
"logging.path=target/foo/");
|
||||
|
@ -491,9 +535,10 @@ public class LoggingApplicationListenerTests {
|
|||
@Test
|
||||
public void systemPropertiesAreSetForLoggingConfiguration() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.exception-conversion-word=conversion", "logging.file=target/log",
|
||||
"logging.path=path", "logging.pattern.console=console",
|
||||
"logging.pattern.file=file", "logging.pattern.level=level");
|
||||
"logging.exception-conversion-word=conversion",
|
||||
"logging.file.name=target/log", "logging.file.path=path",
|
||||
"logging.pattern.console=console", "logging.pattern.file=file",
|
||||
"logging.pattern.level=level");
|
||||
this.initializer.initialize(this.context.getEnvironment(),
|
||||
this.context.getClassLoader());
|
||||
assertThat(System.getProperty(LoggingSystemProperties.CONSOLE_LOG_PATTERN))
|
||||
|
@ -511,6 +556,19 @@ public class LoggingApplicationListenerTests {
|
|||
assertThat(System.getProperty(LoggingSystemProperties.PID_KEY)).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void systemPropertiesAreSetForLoggingConfigurationWithDeprecatedProperties() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.file=target/log", "logging.path=path");
|
||||
this.initializer.initialize(this.context.getEnvironment(),
|
||||
this.context.getClassLoader());
|
||||
assertThat(System.getProperty(LoggingSystemProperties.LOG_FILE))
|
||||
.isEqualTo("target/log");
|
||||
assertThat(System.getProperty(LoggingSystemProperties.LOG_PATH))
|
||||
.isEqualTo("path");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void environmentPropertiesIgnoreUnresolvablePlaceholders() {
|
||||
// gh-7719
|
||||
|
@ -536,7 +594,7 @@ public class LoggingApplicationListenerTests {
|
|||
@Test
|
||||
public void logFilePropertiesCanReferenceSystemProperties() {
|
||||
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(this.context,
|
||||
"logging.file=target/${PID}.log");
|
||||
"logging.file.name=target/${PID}.log");
|
||||
this.initializer.initialize(this.context.getEnvironment(),
|
||||
this.context.getClassLoader());
|
||||
assertThat(System.getProperty(LoggingSystemProperties.LOG_FILE))
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -16,6 +16,7 @@
|
|||
|
||||
package org.springframework.boot.logging;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
@ -39,14 +40,27 @@ public class LogFileTests {
|
|||
|
||||
@Test
|
||||
public void noProperties() {
|
||||
PropertyResolver resolver = getPropertyResolver(null, null);
|
||||
PropertyResolver resolver = getPropertyResolver(Collections.emptyMap());
|
||||
LogFile logFile = LogFile.get(resolver);
|
||||
assertThat(logFile).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loggingFile() {
|
||||
PropertyResolver resolver = getPropertyResolver("log.file", null);
|
||||
PropertyResolver resolver = getPropertyResolver(
|
||||
Collections.singletonMap("logging.file.name", "log.file"));
|
||||
testLoggingFile(resolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void loggingFileWithDeprecatedProperties() {
|
||||
PropertyResolver resolver = getPropertyResolver(
|
||||
Collections.singletonMap("logging.file", "log.file"));
|
||||
testLoggingFile(resolver);
|
||||
}
|
||||
|
||||
private void testLoggingFile(PropertyResolver resolver) {
|
||||
LogFile logFile = LogFile.get(resolver);
|
||||
Properties properties = new Properties();
|
||||
logFile.applyTo(properties);
|
||||
|
@ -58,7 +72,20 @@ public class LogFileTests {
|
|||
|
||||
@Test
|
||||
public void loggingPath() {
|
||||
PropertyResolver resolver = getPropertyResolver(null, "logpath");
|
||||
PropertyResolver resolver = getPropertyResolver(
|
||||
Collections.singletonMap("logging.file.path", "logpath"));
|
||||
testLoggingPath(resolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void loggingPathWithDeprecatedProperties() {
|
||||
PropertyResolver resolver = getPropertyResolver(
|
||||
Collections.singletonMap("logging.path", "logpath"));
|
||||
testLoggingPath(resolver);
|
||||
}
|
||||
|
||||
private void testLoggingPath(PropertyResolver resolver) {
|
||||
LogFile logFile = LogFile.get(resolver);
|
||||
Properties properties = new Properties();
|
||||
logFile.applyTo(properties);
|
||||
|
@ -71,7 +98,24 @@ public class LogFileTests {
|
|||
|
||||
@Test
|
||||
public void loggingFileAndPath() {
|
||||
PropertyResolver resolver = getPropertyResolver("log.file", "logpath");
|
||||
Map<String, Object> properties = new LinkedHashMap<>();
|
||||
properties.put("logging.file.name", "log.file");
|
||||
properties.put("logging.file.path", "logpath");
|
||||
PropertyResolver resolver = getPropertyResolver(properties);
|
||||
testLoggingFileAndPath(resolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void loggingFileAndPathWithDeprecatedProperties() {
|
||||
Map<String, Object> properties = new LinkedHashMap<>();
|
||||
properties.put("logging.file", "log.file");
|
||||
properties.put("logging.path", "logpath");
|
||||
PropertyResolver resolver = getPropertyResolver(properties);
|
||||
testLoggingFileAndPath(resolver);
|
||||
}
|
||||
|
||||
private void testLoggingFileAndPath(PropertyResolver resolver) {
|
||||
LogFile logFile = LogFile.get(resolver);
|
||||
Properties properties = new Properties();
|
||||
logFile.applyTo(properties);
|
||||
|
@ -82,10 +126,7 @@ public class LogFileTests {
|
|||
.isEqualTo("logpath");
|
||||
}
|
||||
|
||||
private PropertyResolver getPropertyResolver(String file, String path) {
|
||||
Map<String, Object> properties = new LinkedHashMap<>();
|
||||
properties.put("logging.file", file);
|
||||
properties.put("logging.path", path);
|
||||
private PropertyResolver getPropertyResolver(Map<String, Object> properties) {
|
||||
PropertySource<?> propertySource = new MapPropertySource("properties",
|
||||
properties);
|
||||
MutablePropertySources propertySources = new MutablePropertySources();
|
||||
|
|
|
@ -3,7 +3,7 @@ service.name=Phil
|
|||
spring.security.user.name=user
|
||||
spring.security.user.password=password
|
||||
|
||||
# logging.file=/tmp/logs/app.log
|
||||
# logging.file.name=/tmp/logs/app.log
|
||||
# logging.level.org.springframework.security=DEBUG
|
||||
management.server.address=127.0.0.1
|
||||
|
||||
|
|
Loading…
Reference in New Issue