Log4j2: Как создать новую папку журнала для каждого дня? - PullRequest
0 голосов
/ 15 апреля 2020

Я сейчас использую log4j2 в конфигурации xml. Затем я обнаружил, что независимо от использования

<RollingFile name="DailyLog" fileName="${baseDir}/${date:yyyyMM}/${date:dd}/daily.log"
                 filePattern="${baseDir}/${date:yyyyMM}/${date:dd}/daily.%d{yyyy-MM-dd}.%i.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}{UTC} %level: %msg %n"/>
        <Policies>
            <OnStartupTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="10 MB"/>
            <TimeBasedTriggeringPolicy interval="1" modulate="false"/>
        </Policies>
    </RollingFile>

Каждая TriggeringPolicy будет изменять только имя файла (но не папку). Ежедневная папка будет создаваться, если я перезапускаю программу каждый день. Поскольку log4j не может знать, изменяется ли дата.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Атрибут имени файла оценивается только один раз при создании конфигурации. Атрибут filePattern оценивается при каждом переходе. Поиск, такой как поиск по дате, который вы используете, может оцениваться несколько раз. Первая оценка происходит, когда оценивается конфигурация, поэтому все ваши запросы $ {date} проверяются при создании конфигурации. Однако, если поиск закодирован как $$ {date}, то первая оценка просто удалит начальный '$'. Затем, когда шаблон оценивается на каждом пролонгации, поиск по дате разрешается в соответствии с текущей датой.

Если вы хотите, чтобы текущий файл регистрировался в каталоге с текущей датой, тогда лучше всего использовать DirectWriteRolloverStrategy . Это может быть достигнуто простым удалением атрибута fileName, в этом случае журналы будут записываться в файл, соответствующий текущему шаблону файла. В вашем случае это выглядело бы как

<RollingFile name="DailyLog"
                 filePattern="${baseDir}/$${date:yyyyMM}/$${date:dd}/daily.%d{yyyy-MM-dd}.%i.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss}{UTC} %level: %msg %n"/>
        <Policies>
            <OnStartupTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="10 MB"/>
            <TimeBasedTriggeringPolicy interval="1" modulate="false"/>
        </Policies>
    </RollingFile>
0 голосов
/ 15 апреля 2020

Я использую Logback.

<fileNamePattern>${LOG_PATH}/info.log.%d{yyyy-MM-dd}
...