logging.pattern 的本地配置文件加载,由 LoggingApplicationListener#onApplicationEnvironmentPreparedEvent 完成(将 logging 系列配置绑定到系统环境变量),由其保存了大量状态,Spring Cloud 刻意去掉了该 listener
因此 logging.pattern 是否支持远程动态更新,主要看 Spring 各日志系统的 loadDefaults 实现,目前只有 logback 支持动态变更 pattern
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.reinitializeLoggingSystem
org.springframework.boot.logging.AbstractLoggingSystem.LoggingSystem.initialize —> 远程配置? —> 是 —> 加载远程配置
—> 否 —> Impl.loadDefaults
org.springframework.boot.logging.logback.LogbackLoggingSystem
@Override
protected void loadDefaults(LoggingInitializationContext initializationContext,
LogFile logFile) {
LoggerContext context = getLoggerContext();
stopAndReset(context);
LogbackConfigurator configurator = new LogbackConfigurator(context);
Environment environment = initializationContext.getEnvironment();
context.putProperty(LoggingSystemProperties.LOG_LEVEL_PATTERN,
environment.resolvePlaceholders(
"${logging.pattern.level:${LOG_LEVEL_PATTERN:%5p}}"));
context.putProperty(LoggingSystemProperties.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);
}
org.springframework.boot.logging.log4j2.Log4J2LoggingSystem
@Override
protected void loadDefaults(LoggingInitializationContext initializationContext,
LogFile logFile) {
if (logFile != null) {
loadConfiguration(getPackagedConfigFile("log4j2-file.xml"), logFile);
}
else {
loadConfiguration(getPackagedConfigFile("log4j2.xml"), logFile);
}
}
org.springframework.boot.logging.java.JavaLoggingSystem
@Override
protected void loadDefaults(LoggingInitializationContext initializationContext,
LogFile logFile) {
if (logFile != null) {
loadConfiguration(getPackagedConfigFile("logging-file.properties"), logFile);
}
else {
loadConfiguration(getPackagedConfigFile("logging.properties"), logFile);
}
}