Итак, я выполнил некоторый реверс-инжиниринг, и причина приведенного выше макета заключается в следующем коде:
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.
Короче говоря, когдавы используете форматирование %
, когда анализатор использует время события журнала, которое может не совпадать с текущим системным временем, когда происходит опрокидывание.При использовании поиска свойства $$
нет никакого отношения к событию журнала, поэтому вы всегда получаете текущее время в указанном вами формате.