Разница между поиском и рисунком - PullRequest
0 голосов
/ 16 октября 2018

В одном из вопросов о RollingFileAppender в Log4j2 я обнаружил следующий фрагмент кода <Property name="FilePattern">C:/logs/$${date:yyyy-MM}/app-%d{MM- dd-yyyy}-%i.log.gz</Property>.

Мне было интересно, что является причиной использования поиска $${data:yyyy-MM} в первой половине и шаблона %d{yyyy-MM-dd} во второй половине.Каков будет эффект использования, например, C:/logs/%d{yyyy-MM}/app-%d{...}-%i.log.gz?

Из того, что я прочитал в документации, поиск поддерживает многие - более сложные - типы поиска свойств, но что является преимуществом в приведенном выше случае, особенноучитывая, что в документации явно указано, что свойство filePattern поддерживает поиск по дате (The pattern also supports interpolation at runtime so any of the Lookups (such as the DateLookup) can be included in the pattern.), но не вдаваясь в подробности, когда или если это следует использовать.

1 Ответ

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

Итак, я выполнил некоторый реверс-инжиниринг, и причина приведенного выше макета заключается в следующем коде:

for (final ArrayPatternConverter converter : patternConverters) {
    if (converter instanceof DatePatternConverter) {
        final DatePatternConverter dateConverter = (DatePatternConverter) converter;
        frequency = calculateFrequency(dateConverter.getPattern());
    }
}

Так что в моем первом случае полностью замененный filePattern выглядел так: logs/%d{yyyy_MM_HH_mm}/appl_log_%d{yyyy_MM_dd}.txt

Приведенный выше код из класса PatternConverter выберет первый преобразователь из %d{yyyy_MM_HH_mm}, определит частоту до EVERY_MINUTE, а затем обнаружит %d{yyyy_MM_dd}, где он перезаписывает старую частоту EVERY_MINUTE дляDAILY.Выполняя ролловер, он создает событие псевдо-журнала со временем (в начале дня из-за частоты DAILY), чтобы отформатировать время файла, чтобы оно заканчивалось на 00_00.

Короче говоря, когдавы используете форматирование %, когда анализатор использует время события журнала, которое может не совпадать с текущим системным временем, когда происходит опрокидывание.При использовании поиска свойства $$ нет никакого отношения к событию журнала, поэтому вы всегда получаете текущее время в указанном вами формате.

...