Skip to content

Commit 392be57

Browse files
committed
Apply Logback system properties and not just common properties to context
Closes gh-24894
1 parent e763627 commit 392be57

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ protected void loadDefaults(LoggingInitializationContext initializationContext,
148148
}
149149
Environment environment = initializationContext.getEnvironment();
150150
// Apply system properties directly in case the same JVM runs multiple apps
151-
new LoggingSystemProperties(environment, context::putProperty).apply(logFile);
151+
new LogbackLoggingSystemProperties(environment, context::putProperty).apply(logFile);
152152
LogbackConfigurator configurator = debug ? new DebugLogbackConfigurator(context)
153153
: new LogbackConfigurator(context);
154154
new DefaultLogbackConfiguration(initializationContext, logFile).apply(configurator);

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystemProperties.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.logging.logback;
1818

1919
import java.nio.charset.Charset;
20+
import java.util.function.BiConsumer;
2021

2122
import ch.qos.logback.core.util.FileSize;
2223

@@ -66,6 +67,16 @@ public LogbackLoggingSystemProperties(Environment environment) {
6667
super(environment);
6768
}
6869

70+
/**
71+
* Create a new {@link LogbackLoggingSystemProperties} instance.
72+
* @param environment the source environment
73+
* @param setter setter used to apply the property
74+
* @since 2.4.3
75+
*/
76+
public LogbackLoggingSystemProperties(Environment environment, BiConsumer<String, String> setter) {
77+
super(environment, setter);
78+
}
79+
6980
@Override
7081
protected Charset getDefaultCharset() {
7182
return Charset.defaultCharset();

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@
1717
package org.springframework.boot.logging.logback;
1818

1919
import java.io.File;
20+
import java.lang.reflect.Field;
21+
import java.lang.reflect.Modifier;
22+
import java.nio.charset.Charset;
2023
import java.nio.charset.StandardCharsets;
2124
import java.util.Arrays;
2225
import java.util.EnumSet;
2326
import java.util.HashSet;
2427
import java.util.List;
28+
import java.util.Map;
2529
import java.util.Set;
2630
import java.util.logging.Handler;
2731
import java.util.logging.LogManager;
@@ -57,6 +61,7 @@
5761
import org.springframework.core.env.ConfigurableEnvironment;
5862
import org.springframework.mock.env.MockEnvironment;
5963
import org.springframework.test.util.ReflectionTestUtils;
64+
import org.springframework.util.ReflectionUtils;
6065
import org.springframework.util.StringUtils;
6166

6267
import static org.assertj.core.api.Assertions.assertThat;
@@ -501,6 +506,30 @@ void initializeShouldSetSystemProperty() {
501506
assertThat(System.getProperty(LoggingSystemProperties.LOG_FILE)).endsWith("example.log");
502507
}
503508

509+
@Test
510+
void initializeShouldApplyLogbackSystemPropertiesToTheContext() {
511+
this.environment.setProperty("logging.logback.rollingpolicy.file-name-pattern", "file-name-pattern");
512+
this.environment.setProperty("logging.logback.rollingpolicy.clean-history-on-start", "true");
513+
this.environment.setProperty("logging.logback.rollingpolicy.max-file-size", "10MB");
514+
this.environment.setProperty("logging.logback.rollingpolicy.total-size-cap", "100MB");
515+
this.environment.setProperty("logging.logback.rollingpolicy.max-history", "20");
516+
this.loggingSystem.beforeInitialize();
517+
initialize(this.initializationContext, null, null);
518+
LoggerContext loggerContext = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();
519+
Map<String, String> properties = loggerContext.getCopyOfPropertyMap();
520+
Set<String> expectedProperties = new HashSet<String>();
521+
ReflectionUtils.doWithFields(LogbackLoggingSystemProperties.class,
522+
(field) -> expectedProperties.add((String) field.get(null)), this::isPublicStaticFinal);
523+
expectedProperties.removeAll(Arrays.asList("LOG_FILE", "LOG_PATH"));
524+
assertThat(properties).containsOnlyKeys(expectedProperties);
525+
assertThat(properties).containsEntry("CONSOLE_LOG_CHARSET", Charset.defaultCharset().name());
526+
}
527+
528+
private boolean isPublicStaticFinal(Field field) {
529+
int modifiers = field.getModifiers();
530+
return Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers);
531+
}
532+
504533
@Test
505534
void initializationIsOnlyPerformedOnceUntilCleanedUp() {
506535
LoggerContext loggerContext = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();

0 commit comments

Comments
 (0)