|  | 
| 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