【问题标题】:Usage of TimeBasedTriggeringPolicy in log4j2 configuration在 log4j2 配置中使用 TimeBasedTriggeringPolicy
【发布时间】:2020-09-16 08:03:04
【问题描述】:

我正在尝试将 TimeBasedTriggeringPolicy 与嵌入 spring-boot 2.3.0.RELEASE (spring-boot-started-log4j2) 的 log4j-2.13.2 一起使用。 预期的功能是应该为每天创建一个日志文件。

我的配置文件如下所示:

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 属性以实现预期的行为(为每天生成一个日志文件,当前日期包含在文件名中)?

【问题讨论】:

    标签: spring-boot log4j2


    【解决方案1】:

    似乎需要结合这两种方法来实现预期的行为:

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

    【讨论】:

      猜你喜欢
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 2012-11-06
      • 2013-04-09
      • 2014-10-18
      • 1970-01-01
      相关资源
      最近更新 更多