Почему выбрасывается исключение java.lang.IllegalStateException о некорректной дате в xml-файле log4j2?
Моя задача - сформировать конфигурационный XML-файл для log4j2 таким образом, чтобы:
- логи писались
каждый раз при запуске программы; - логи писались в папку, которая имеет имя равное текущей дате в формате
год-месяц-день; - непосредственно файл с логами в формате
txtимел имя, содержащее в себегод-месяц-день_часы-минуты.
Согласно официальной документации, вставка даты в XML-файл осуществляется с помощью lookup'ов, выглядит это следующим образом: $${date:MM-dd-yyyy}.
Найдя всю необходимую информацию на официальном сайте log4j в разделе конфигурации log4j2 получается следующий код:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-$${date:yyyy-MM}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
Пытаюсь скомпилировать все файлы и получаю ошибку:
2021-04-23 00:28:40,421 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: Pattern does not contain a date
Что в переводе означает:
паттерн filePattern не содержит дату
Почему при таком формате, выполненном в соответствии синтаксисом официальной документации, я получаю исключение java.lang.IllegalStateException.
Поискав в мануале на официальном сайте log4j2 я наткнулся на такой пример атрибута filePattern, в котором формат для папки (которая создается автоматически, в случае её отсутсвия) задается с помощью lookup'a DateFormat вот так /$${date:yyyy-MM}/, а для файла уже используется формат %d{MM-dd-yyyy}:
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"
Почему для значения атрибута filePattern, с целью формирования имени файла, нельзя использоваться формат lookup'a DateFormat вида $${date:yyyy-MM}?