|
17 | 17 | package org.springframework.boot.logging.logback;
|
18 | 18 |
|
19 | 19 | import java.io.File;
|
| 20 | +import java.lang.reflect.Field; |
| 21 | +import java.lang.reflect.Modifier; |
| 22 | +import java.nio.charset.Charset; |
20 | 23 | import java.nio.charset.StandardCharsets;
|
21 | 24 | import java.util.Arrays;
|
22 | 25 | import java.util.EnumSet;
|
23 | 26 | import java.util.HashSet;
|
24 | 27 | import java.util.List;
|
| 28 | +import java.util.Map; |
25 | 29 | import java.util.Set;
|
26 | 30 | import java.util.logging.Handler;
|
27 | 31 | import java.util.logging.LogManager;
|
|
57 | 61 | import org.springframework.core.env.ConfigurableEnvironment;
|
58 | 62 | import org.springframework.mock.env.MockEnvironment;
|
59 | 63 | import org.springframework.test.util.ReflectionTestUtils;
|
| 64 | +import org.springframework.util.ReflectionUtils; |
60 | 65 | import org.springframework.util.StringUtils;
|
61 | 66 |
|
62 | 67 | import static org.assertj.core.api.Assertions.assertThat;
|
@@ -501,6 +506,30 @@ void initializeShouldSetSystemProperty() {
|
501 | 506 | assertThat(System.getProperty(LoggingSystemProperties.LOG_FILE)).endsWith("example.log");
|
502 | 507 | }
|
503 | 508 |
|
| 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 | + |
504 | 533 | @Test
|
505 | 534 | void initializationIsOnlyPerformedOnceUntilCleanedUp() {
|
506 | 535 | LoggerContext loggerContext = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();
|
|
0 commit comments