|
39 | 39 | import org.apache.logging.log4j.LogManager;
|
40 | 40 | import org.apache.logging.log4j.Logger;
|
41 | 41 | 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; |
42 | 48 | import org.apache.logging.log4j.core.config.Configuration;
|
43 | 49 | import org.apache.logging.log4j.core.config.LoggerConfig;
|
44 | 50 | import org.apache.logging.log4j.core.config.Reconfigurable;
|
@@ -930,6 +936,73 @@ void rollingPolicyDeprecatedPropertiesAreApplied() {
|
930 | 936 | assertThat(maxHistory).isEqualTo("15");
|
931 | 937 | }
|
932 | 938 |
|
| 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 | + |
933 | 1006 | @Target(ElementType.METHOD)
|
934 | 1007 | @Retention(RetentionPolicy.RUNTIME)
|
935 | 1008 | @WithResource(name = "override.xml", content = """
|
|
0 commit comments