У меня есть требование сохранять журналы только за последние 50 дней (я хочу только журналы за последние 50 дней). в файле свойств log4j у меня есть индекс maxbackup, установленный в 1 для целей тестирования. я знаю, что log4j dailyrollingfileappender только ролловер ежемесячно в год ежедневно и т. д. c. Но мое требование - это пролонгировать каждый день, но хочу только в течение последних 50 дней, остальные нужно удалить. Итак, я нашел CustomAppender, который расширяет, который расширяет ежедневные приложения, и мой хранитель выглядит, как показано ниже. По сути, мы добавили maxbackupindex в ежедневный аппликатор подвижного файла.
Code:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.helpers.LogLog;
public class CustomAppender extends DailyRollingFileAppender {
private int maxBackupIndex;
public void setMaxBackupIndex(int maxBackupIndex) {
this.maxBackupIndex = maxBackupIndex;
}
@Override
public void rollOver() throws IOException {
super.rollOver();
File file = new File(fileName);
List<String> files = new ArrayList<>();
File[] dirFiles = new File(file.getAbsolutePath()).getParentFile().listFiles();
if (dirFiles != null && dirFiles.length > 0) {
Arrays.sort(dirFiles, (a, b) -> Long.compare(a.lastModified(), b.lastModified()));
for (File allFile : dirFiles) {
if (allFile.getName().contains(fileName)) {
files.add(allFile.getAbsolutePath());
}
}
}
if (files.size() > maxBackupIndex+1) {
File deleteFile = new File(files.get(0));
LogLog.debug("delete result for"+deleteFile.getAbsolutePath()+" is "+deleteFile.delete());
files.remove(0);
}
}
}
my log4j properties looks below.
log4j.rootLogger=WARN,stdout
log4j.logger.X.Y.Z.A=DEBUG,Application
log4j.appender.Application=org.apache.log4j.CustomAppender
log4j.appender.Application.File=/h/i/logs/m/Application.log
log4j.appender.Application.MaxBackupIndex=1
log4j.appender.Application.layout=org.apache.log4j.PatternLayout
log4j.appender.Application.layout.ConversionPattern=%d{DATE} %-5p %m - %c [%t] [%r ms]%n%n
#set up the apache appender
log4j.logger.org.apache=ON
# Hibernate loggers and appender
#log4j.logger.org.hibernate=DEBUG,Hibernate
log4j.logger.org.hibernate=DEBUG,Hibernate
log4j.additivity.org.hibernate=false
log4j.logger.org.hibernate.SQL=DEBUG,Hibernate
log4j.additivity.org.hibernate.SQL=false
log4j.logger.org.hibernate.type=DEBUG,Hibernate
log4j.additivity.org.hibernate.type=false
log4j.appender.Hibernate=org.apache.log4j.CustomAppender
log4j.appender.Hibernate.File=/h/i/logs/m/Hibernate.log
log4j.appender.Hibernate.MaxBackupIndex=1
log4j.appender.Hibernate.layout=org.apache.log4j.PatternLayout
log4j.appender.Hibernate.layout.ConversionPattern=Hib: %d [%t] %-5p %c - %m%n%n
However, the previous files are not being deleted , even though maxbackupindex is set to 1.
any one can please help me out?