как сохранить логи за последние 50 дней только в log4j - PullRequest
1 голос
/ 01 марта 2020

У меня есть требование сохранять журналы только за последние 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?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...