I am created TriggeringPolicy and RollingPolicy like this:
class MyTriggeringPolicy<E> extends DefaultTimeBasedFileNamingAndTriggeringPolicy<E> {
protected int periodMinutes = 1;
public int getPeriodMinutes() {
return this.periodMinutes;
}
public void setPeriodMinutes(int minutes) {
if (minutes > 0) {
this.periodMinutes = minutes;
}
}
private long roundTimestamp(long time) = {
int periodTicks = periodMinutes * 60000;
return periodTicks * (time / periodTicks);
}
@Override
public void setDateInCurrentPeriod(long now) {
dateInCurrentPeriod.setTime(roundTimestamp(now));
}
@Override
public void setDateInCurrentPeriod(Date _dateInCurrentPeriod) {
dateInCurrentPeriod = new Date(roundTimestamp(_dateInCurrentPeriod.getTime()));
}
@Override
public void computeNextCheck() {
rc.setTime(dateInCurrentPeriod);
rc.set(Calendar.SECOND, 0);
rc.set(Calendar.MILLISECOND, 0);
rc.add(Calendar.MINUTE, periodMinutes);
nextCheck = rc.getTime().getTime();
}
@Override
public String toString() {
return "MyTriggeringPolicy";
}
}
class MyRollingPolicy<E> extends TimeBasedRollingPolicy<E> {
private int periodMinutes;
public int getPeriodMinutes() {
return this.periodMinutes;
}
public void setPeriodMinutes(int minutes) {
this.periodMinutes = minutes;
}
@Override
public void start() {
MyTriggeringPolicy<E> triggeringPolicy = new MyTriggeringPolicy<E>();
triggeringPolicy.setPeriodMinutes(periodMinutes);
setTimeBasedFileNamingAndTriggeringPolicy(triggeringPolicy);
super.start();
}
@Override
public String toString() {
return "MyRollingPolicy";
}
}
<rollingPolicy class="MyRollingPolicy">
<periodMinutes>5</periodMinutes>
<fileNamePattern>application-%d{yyyyMMddHHmm}.log</fileNamePattern>
</rollingPolicy>
This is rollover in 5,10,15... minutes.
e.g. 'application-201910301100.log' contains logs from 2019-10-30 11:00:00 to 2019-10-30 11:04:59.