LogBack指定时间间隔生成日志文件
支持小时,分钟,秒
比如每2小时,每5分钟,每30秒产生一个日志文件
package dao.log;
import ch.qos.logback.core.joran.spi.NoAutoStart;
import ch.qos.logback.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy;
import lombok.Getter;
import lombok.Setter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@Getter
@Setter
@NoAutoStart
public class PeriodTimeBasedFileNamingAndTriggeringPolicy extends DefaultTimeBasedFileNamingAndTriggeringPolicy {
private int periods = 1;
private String type = "min";
@Override
public void start() {
if (periods < 1) periods = 1;
super.start();
}
private Date getAlignTime(long timeStamp) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);
if (periods == 1)
return calendar.getTime();
if ("hour".equals(type))
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) / periods * periods);
else if ("min".equals(type))
calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) / periods * periods);
else if ("sec".equals(type))
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) / periods * periods);
return calendar.getTime();
}
@Override
protected void setDateInCurrentPeriod(long now) {
this.dateInCurrentPeriod = getAlignTime(now);
}
@Override
public void setDateInCurrentPeriod(Date _dateInCurrentPeriod) {
setDateInCurrentPeriod(_dateInCurrentPeriod.getTime());
}
@Override
protected void computeNextCheck() {
nextCheck = rc.getEndOfNextNthPeriod(dateInCurrentPeriod, periods).getTime();
}
@Override
public String toString() {
return this.getClass().getName();
}
public static void main(String[] args) {
PeriodTimeBasedFileNamingAndTriggeringPolicy obj = new PeriodTimeBasedFileNamingAndTriggeringPolicy();
obj.setPeriods(5);
obj.setType("min");
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(obj.getAlignTime(System.currentTimeMillis())));
}
}
配置每5分钟产生一个日志文件
<appender name="logBase"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_HOME}/logBase/%d{yyyyMMdd,aux}/%d{HH,aux}/%d{mm}.log
</FileNamePattern>
<MaxHistory>1440</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="dao.log.PeriodTimeBasedFileNamingAndTriggeringPolicy">
<periods>5</periods>
<type>min</type>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%msg%n
</Pattern>
</layout>
</appender>