Использование TimeBasedTriggeringPolicy в конфигурации log4j2 - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь использовать TimeBasedTriggeringPolicy с log4j-2.13.2, который встроен в spring -boot 2.3.0.RELEASE (spring-boot-start-log4j2). Ожидаемая функциональность заключается в том, что файл журнала должен создаваться на каждый день.

Мой файл конфигурации выглядит следующим образом:

appender.rolling.type = RollingFile
appender.rolling.name = fileAppender
appender.rolling.fileName = ${basePath}/log-${date:yyyyMMdd}.log
appender.rolling.filePattern = ${basePath}/log-${date:yyyyMMdd}-%i.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true

Однако при запуске приложения возникает следующее исключение:

2020-05-28 23:39:07,991 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 java.lang.IllegalStateException: Pattern does not contain a date
    at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNextTime(PatternProcessor.java:154)
    at org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy.initialize(TimeBasedTriggeringPolicy.java:117)
    at org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy.initialize(CompositeTriggeringPolicy.java:54)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.initialize(RollingFileManager.java:158)
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:153)
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:62)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1002)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:942)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:934)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:552)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:288)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:618)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:295)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:240)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:159)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:131)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:101)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:188)

Если я изменяю шаблон файла:

appender.rolling.fileName = ${basePath}/log-%d{yyyyMMdd}.log
appender.rolling.filePattern = ${basePath}/log-%d{yyyyMMdd}-%i.log

, исключение больше не генерируется, но имя файла - «log-% d {yyyyMMdd} .log» вместо log-20200528.log (например).

Как мне указать свойство filePattern, чтобы добиться ожидаемого поведения (создавать файл журнала для каждого дня, с текущей датой, заключенной в имя файла)?

1 Ответ

0 голосов
/ 29 мая 2020

Кажется, что для достижения ожидаемого поведения необходима комбинация двух подходов:

appender.rolling.fileName = ${basePath}/log-${date:yyyyMMdd}.log
appender.rolling.filePattern = ${basePath}log-%d{yyyyMMdd}-%i.log
...