log4j2 XML Rolling File Appender - Небольшие изменения в appender приводят к тому, что работающий код XML-файла не работает - PullRequest
0 голосов
/ 09 октября 2018

У меня есть xml-файл приложения log4j2, который полностью работает и откатывает файлы через каждую минуту.Я пытался изменить этот откат один раз в день с некоторыми изменениями в коде, но теперь он не работает.Чего мне не хватает?

Это старый XML-файл appender (рабочий):

        <!-- Rolling File Appenders -->
    <RollingFile name="RollingFile" fileName=".\logs\log${date:yyyyMMdd}.log" 
    filePattern=".\logs\oldLogs\log_%d{yyyyMMdd-HHmm}.log">
        <PatternLayout
            pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] %-3level %logger{36} - %msg%n" />

        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>

        <DefaultRolloverStrategy max="3">
            <Delete basePath=".\logs\oldLogs" maxDepth="2">
            <IfAccumulatedFileCount exceeds="3" />
            </Delete>
        </DefaultRolloverStrategy>          
    </RollingFile>

Это новый ежедневный роллинг (не работает):

        <!-- Rolling File Appenders -->
    <RollingFile name="RollingFile" fileName=".\logs\log${date:yyyyMMdd}.log" 
    filePattern=".\logs\oldLogs\log_%d{yyyyMMdd}.log">
        <PatternLayout
            pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] %-3level %logger{36} - %msg%n" />

        <Policies>
            <OnStartupTriggeringPolicy/>
            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        </Policies>

        <DefaultRolloverStrategy max="10">
            <Delete basePath=".\logs\oldLogs" maxDepth="2">
            <IfAccumulatedFileCount exceeds="10"/>
            </Delete>
        </DefaultRolloverStrategy>          
    </RollingFile>

Редактировать: ожидаемое поведение: ~ Будет создавать журналы в день и сохранять журналы за день до этого в этой папке: ". \ Logs \ oldLogs \" ~ Сохраняет только 10 самых последних журналов и удаляетстарые журналы

Текущее поведение: ~ Создает журнал в день, но к завтрашнему дню не катит файл в эту папку: ". \ logs \ oldLogs \" ~ Не удаляет файлы журнала

1 Ответ

0 голосов
/ 11 октября 2018

Я думаю, что самым простым решением было бы сделать атрибут fileName для RollingFile константой.Самые последние журналы всегда будут содержаться в этом файле, поэтому я не вижу необходимости указывать дату в имени файла.Когда журнал заархивирован, к имени файла будет добавлена ​​дата согласно filePattern.

. Кроме того, вы можете удалить атрибуты OnStartupTriggeringPolicy и max DefaultRolloverStrategy.Атрибут max используется с «целочисленным счетчиком», упомянутым в описании параметра RollingFileAppender filePattern, и, поскольку вы не используете этот счетчик, max вам не поможет.

Я считаю, что это должно работать для вас:

    <RollingFile name="RollingFile" fileName=".\logs\applog.log"
        filePattern=".\logs\oldlogs\applog_%d{yyyyMMdd}.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] %-3level %logger{36} - %msg%n" />
        <Policies>
            <TimeBasedTriggeringPolicy interval="1"
                modulate="true" />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath=".\logs\oldlogs" maxDepth="2">
                <IfAccumulatedFileCount exceeds="10" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>
...