Introduce configurable logging.pattern.dateformat
Add configurable logger dateformat support for Logback and Log4j2. Closes gh-8516
This commit is contained in:
parent
d50fe8874f
commit
7728f8fde6
|
@ -48,6 +48,7 @@ content into your application; rather pick only the properties that you need.
|
|||
logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.
|
||||
logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.
|
||||
logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.
|
||||
logging.pattern.dateformat= # Appender pattern for log dateformat (default yyyy-MM-dd HH:mm:ss.SSS). Only supported with the default logback setup.
|
||||
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.
|
||||
|
||||
# AOP
|
||||
|
|
|
@ -79,6 +79,11 @@ public class LoggingSystemProperties {
|
|||
*/
|
||||
public static final String LOG_LEVEL_PATTERN = "LOG_LEVEL_PATTERN";
|
||||
|
||||
/**
|
||||
* The name of the System property that contains the log date-format pattern.
|
||||
*/
|
||||
public static final String LOG_DATEFORMAT_PATTERN = "LOG_DATEFORMAT_PATTERN";
|
||||
|
||||
private final Environment environment;
|
||||
|
||||
/**
|
||||
|
@ -103,6 +108,7 @@ public class LoggingSystemProperties {
|
|||
setSystemProperty(resolver, FILE_MAX_HISTORY, "file.max-history");
|
||||
setSystemProperty(resolver, FILE_MAX_SIZE, "file.max-size");
|
||||
setSystemProperty(resolver, LOG_LEVEL_PATTERN, "pattern.level");
|
||||
setSystemProperty(resolver, LOG_DATEFORMAT_PATTERN, "pattern.dateformat");
|
||||
setSystemProperty(PID_KEY, new ApplicationPid().toString());
|
||||
if (logFile != null) {
|
||||
logFile.applyToSystemProperties();
|
||||
|
|
|
@ -50,12 +50,12 @@ import org.springframework.util.ReflectionUtils;
|
|||
*/
|
||||
class DefaultLogbackConfiguration {
|
||||
|
||||
private static final String CONSOLE_LOG_PATTERN = "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} "
|
||||
private static final String CONSOLE_LOG_PATTERN = "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} "
|
||||
+ "%clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} "
|
||||
+ "%clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} "
|
||||
+ "%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}";
|
||||
|
||||
private static final String FILE_LOG_PATTERN = "%d{yyyy-MM-dd HH:mm:ss.SSS} "
|
||||
private static final String FILE_LOG_PATTERN = "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} "
|
||||
+ "${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}";
|
||||
|
||||
private static final String MAX_FILE_SIZE = "10MB";
|
||||
|
|
|
@ -43,6 +43,7 @@ import org.springframework.boot.logging.LoggerConfiguration;
|
|||
import org.springframework.boot.logging.LoggingInitializationContext;
|
||||
import org.springframework.boot.logging.LoggingSystem;
|
||||
import org.springframework.boot.logging.Slf4JLoggingSystem;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ResourceUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
@ -125,9 +126,11 @@ public class LogbackLoggingSystem extends Slf4JLoggingSystem {
|
|||
LoggerContext context = getLoggerContext();
|
||||
stopAndReset(context);
|
||||
LogbackConfigurator configurator = new LogbackConfigurator(context);
|
||||
context.putProperty("LOG_LEVEL_PATTERN",
|
||||
initializationContext.getEnvironment().resolvePlaceholders(
|
||||
"${logging.pattern.level:${LOG_LEVEL_PATTERN:%5p}}"));
|
||||
Environment environment = initializationContext.getEnvironment();
|
||||
context.putProperty("LOG_LEVEL_PATTERN", environment.resolvePlaceholders(
|
||||
"${logging.pattern.level:${LOG_LEVEL_PATTERN:%5p}}"));
|
||||
context.putProperty("LOG_DATEFORMAT_PATTERN", environment.resolvePlaceholders(
|
||||
"${logging.pattern.dateformat:${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}"));
|
||||
new DefaultLogbackConfiguration(initializationContext, logFile)
|
||||
.apply(configurator);
|
||||
context.setPackagingDataEnabled(true);
|
||||
|
|
|
@ -94,14 +94,14 @@
|
|||
"type": "java.lang.String",
|
||||
"description": "Appender pattern for output to the console. Only supported with the default logback setup.",
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener",
|
||||
"defaultValue": "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"
|
||||
"defaultValue": "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"
|
||||
},
|
||||
{
|
||||
"name": "logging.pattern.file",
|
||||
"type": "java.lang.String",
|
||||
"description": "Appender pattern for output to the file. Only supported with the default logback setup.",
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener",
|
||||
"defaultValue": "%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"
|
||||
"defaultValue": "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"
|
||||
},
|
||||
{
|
||||
"name": "logging.pattern.level",
|
||||
|
@ -109,6 +109,12 @@
|
|||
"description": "Appender pattern for log level (default %5p). Only supported with the default logback setup.",
|
||||
"sourceType": "org.springframework.boot.context.logging.LoggingApplicationListener"
|
||||
},
|
||||
{
|
||||
"name": "logging.pattern.dateformat",
|
||||
"type": "java.lang.String",
|
||||
"description": "Appender pattern for log dateformat (default yyyy-MM-dd HH:mm:ss.SSS). Only supported with the default logback setup.",
|
||||
"sourceType": "org.springframework.boot.logging.LoggingApplicationListener"
|
||||
},
|
||||
{
|
||||
"name": "logging.path",
|
||||
"type": "java.lang.String",
|
||||
|
|
|
@ -4,8 +4,10 @@
|
|||
<Property name="PID">????</Property>
|
||||
<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
|
||||
<Property name="LOG_LEVEL_PATTERN">%5p</Property>
|
||||
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
<Property name="FILE_LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
|
||||
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
|
||||
</Properties>
|
||||
<Appenders>
|
||||
<Console name="Console" target="SYSTEM_OUT" follow="true">
|
||||
|
|
|
@ -4,8 +4,9 @@
|
|||
<Property name="PID">????</Property>
|
||||
<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
|
||||
<Property name="LOG_LEVEL_PATTERN">%5p</Property>
|
||||
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
<Property name="FILE_LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
|
||||
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
|
||||
</Properties>
|
||||
<Appenders>
|
||||
<Console name="Console" target="SYSTEM_OUT" follow="true">
|
||||
|
|
|
@ -9,8 +9,8 @@ initialization performed by Boot
|
|||
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
|
||||
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
|
||||
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
|
||||
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
|
||||
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
|
||||
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
|
||||
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
|
||||
|
||||
<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">
|
||||
<destinationLogger>org.springframework.boot</destinationLogger>
|
||||
|
|
|
@ -440,6 +440,20 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
|
|||
verify(listener, times(2)).onReset(loggerContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDateformatPatternProperty() {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
environment.setProperty("logging.pattern.dateformat",
|
||||
"yyyy-MM-dd'T'hh:mm:ss.SSSZ");
|
||||
LoggingInitializationContext loggingInitializationContext = new LoggingInitializationContext(
|
||||
environment);
|
||||
this.loggingSystem.initialize(loggingInitializationContext, null, null);
|
||||
this.logger.info("Hello world");
|
||||
String output = this.output.toString().trim();
|
||||
assertThat(getLineWithText(output, "Hello world"))
|
||||
.containsPattern("\\d{4}-\\d{2}\\-\\d{2}T\\d{2}:\\d{2}:\\d{2}");
|
||||
}
|
||||
|
||||
private static Logger getRootLogger() {
|
||||
ILoggerFactory factory = StaticLoggerBinder.getSingleton().getLoggerFactory();
|
||||
LoggerContext context = (LoggerContext) factory;
|
||||
|
|
Loading…
Reference in New Issue