Skip to content

Commit 8b428c8

Browse files
committed
Tests: Initialize with packaged file config and unwrap composite policy
- Initialize with classpath:org/springframework/boot/logging/log4j2/log4j2-file.xml to validate file-based rolling - Unwrap CompositeTriggeringPolicy to locate nested SpringBootTriggeringPolicy and assert its delegate - Keep assertions for time, size-and-time, and cron strategies Signed-off-by: hojooo <[email protected]>
1 parent c986c3c commit 8b428c8

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

core/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@
3939
import org.apache.logging.log4j.LogManager;
4040
import org.apache.logging.log4j.Logger;
4141
import org.apache.logging.log4j.core.LoggerContext;
42+
import org.apache.logging.log4j.core.appender.RollingFileAppender;
43+
import org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy;
44+
import org.apache.logging.log4j.core.appender.rolling.CronTriggeringPolicy;
45+
import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy;
46+
import org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy;
47+
import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy;
4248
import org.apache.logging.log4j.core.config.Configuration;
4349
import org.apache.logging.log4j.core.config.LoggerConfig;
4450
import org.apache.logging.log4j.core.config.Reconfigurable;
@@ -930,6 +936,73 @@ void rollingPolicyDeprecatedPropertiesAreApplied() {
930936
assertThat(maxHistory).isEqualTo("15");
931937
}
932938

939+
@Test
940+
void rollingPolicyTimeStrategyIsApplied() {
941+
this.environment.setProperty("logging.log4j2.rollingpolicy.strategy", "time");
942+
this.environment.setProperty("logging.log4j2.rollingpolicy.time-based.interval", "2");
943+
SpringBootTriggeringPolicy policy = getTriggeringPolicy();
944+
TriggeringPolicy delegate = policy.getDelegate();
945+
assertThat(delegate).isInstanceOf(TimeBasedTriggeringPolicy.class);
946+
TimeBasedTriggeringPolicy timePolicy = (TimeBasedTriggeringPolicy) delegate;
947+
assertThat(timePolicy.getInterval()).isEqualTo(2);
948+
}
949+
950+
@Test
951+
void rollingPolicySizeAndTimeStrategyIsApplied() {
952+
this.environment.setProperty("logging.log4j2.rollingpolicy.strategy", "size-and-time");
953+
this.environment.setProperty("logging.log4j2.rollingpolicy.max-file-size", "5MB");
954+
this.environment.setProperty("logging.log4j2.rollingpolicy.time-based.interval", "3");
955+
SpringBootTriggeringPolicy policy = getTriggeringPolicy();
956+
TriggeringPolicy delegate = policy.getDelegate();
957+
assertThat(delegate).isInstanceOf(CompositeTriggeringPolicy.class);
958+
CompositeTriggeringPolicy composite = (CompositeTriggeringPolicy) delegate;
959+
TriggeringPolicy[] policies = composite.getTriggeringPolicies();
960+
assertThat(policies).anyMatch(TimeBasedTriggeringPolicy.class::isInstance);
961+
assertThat(policies).anyMatch(SizeBasedTriggeringPolicy.class::isInstance);
962+
}
963+
964+
@Test
965+
void rollingPolicyCronStrategyIsApplied() {
966+
this.environment.setProperty("logging.log4j2.rollingpolicy.strategy", "cron");
967+
this.environment.setProperty("logging.log4j2.rollingpolicy.cron.schedule", "0 0 0 * * ?");
968+
SpringBootTriggeringPolicy policy = getTriggeringPolicy();
969+
TriggeringPolicy delegate = policy.getDelegate();
970+
assertThat(delegate).isInstanceOf(CronTriggeringPolicy.class);
971+
CronTriggeringPolicy cronPolicy = (CronTriggeringPolicy) delegate;
972+
assertThat(cronPolicy.getCronExpression().getCronExpression()).isEqualTo("0 0 0 * * ?");
973+
}
974+
975+
private SpringBootTriggeringPolicy getTriggeringPolicy() {
976+
File file = new File(tmpDir(), "target-file.log");
977+
LogFile logFile = getLogFile(file.getPath(), null);
978+
this.loggingSystem.beforeInitialize();
979+
this.loggingSystem.initialize(this.initializationContext, "classpath:org/springframework/boot/logging/log4j2/log4j2-file.xml", logFile);
980+
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
981+
Configuration configuration = loggerContext.getConfiguration();
982+
System.out.println("Configuration location: " + configuration.getConfigurationSource().getLocation());
983+
RollingFileAppender appender = (RollingFileAppender) configuration.getAppenders().get("File");
984+
assertThat(appender).isNotNull();
985+
TriggeringPolicy topPolicy = appender.getManager().getTriggeringPolicy();
986+
SpringBootTriggeringPolicy policy = findSpringBootTriggeringPolicy(topPolicy);
987+
assertThat(policy).isNotNull();
988+
return policy;
989+
}
990+
991+
private SpringBootTriggeringPolicy findSpringBootTriggeringPolicy(TriggeringPolicy policy) {
992+
if (policy instanceof SpringBootTriggeringPolicy springBoot) {
993+
return springBoot;
994+
}
995+
if (policy instanceof CompositeTriggeringPolicy composite) {
996+
for (TriggeringPolicy child : composite.getTriggeringPolicies()) {
997+
SpringBootTriggeringPolicy found = findSpringBootTriggeringPolicy(child);
998+
if (found != null) {
999+
return found;
1000+
}
1001+
}
1002+
}
1003+
return null;
1004+
}
1005+
9331006
@Target(ElementType.METHOD)
9341007
@Retention(RetentionPolicy.RUNTIME)
9351008
@WithResource(name = "override.xml", content = """

0 commit comments

Comments
 (0)