Как удалить самые старые строки из файла журнала, используя logback? - PullRequest
0 голосов
/ 09 января 2019

Я написал код на основе этого решения: https://gist.github.com/umangmathur92/a65f67c01e2b425289b8

        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        lc.reset();
        final String LOG_DIR = context.getExternalCacheDir() + File.separator + ".ts";
        RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>();
        rollingFileAppender.setAppend(true);
        rollingFileAppender.setContext(lc);
        rollingFileAppender.setLazy(true);
        rollingFileAppender.setFile(LOG_DIR + File.separator + "ts.log");
        SizeBasedTriggeringPolicy<ILoggingEvent> trigPolicy = new SizeBasedTriggeringPolicy<>();
        trigPolicy.setMaxFileSize(new FileSize(1024 * 256));
        trigPolicy.setContext(lc);
        trigPolicy.start();
        FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();
        rollingPolicy.setContext(lc);
        rollingPolicy.setParent(rollingFileAppender);
        rollingPolicy.setFileNamePattern(LOG_DIR + File.separator + "ts.%i.log");
        rollingPolicy.setMinIndex(1);
        rollingPolicy.setMaxIndex(1);
        rollingPolicy.start();
        rollingFileAppender.setTriggeringPolicy(trigPolicy);
        rollingFileAppender.setRollingPolicy(rollingPolicy);
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setPattern("%msg%n");
        encoder.setContext(lc);
        encoder.start();
        rollingFileAppender.setEncoder(encoder);
        rollingFileAppender.start();
        ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
        root.addAppender(rollingFileAppender);

Но это не то, что я хотел сделать. Этот код удаляет весь файл, когда достигает указанного предела, и начинает писать новый (поэтому, после достижения предела 256 КБ, файл занимает 10 КБ , например ).

Я хочу ограничить размер файла 256 КБ и очистить самые старые строки, чтобы освободить место для новых.

Пример:

Line 1 sample text.
Line 2 sample text.
Line 3 sample text.
Line 4 sample text.
Line 5 sample text.

Представьте, что эти строки занимают 256 КБ, и когда я пишу новую строку:

Line 6 sample text.

Я хочу, чтобы этот файл выглядел следующим образом:

Line 2 sample text.
Line 3 sample text.
Line 4 sample text.
Line 5 sample text.
Line 6 sample text.

1 Ответ

0 голосов
/ 10 января 2019

Для этого потребуется переписать весь файл всякий раз, когда строка удаляется с начала. Таким образом, это было бы узким местом производительности. Обычное решение - запустить новый файл журнала, когда старый достигнет определенного размера.

...