当前位置: 首页 > 知识库问答 >
问题:

在log4j2配置中使用TimeBasedTriggering策略

吴炎彬
2023-03-14

我正在尝试将基于时间的触发策略与log4j-2.13一起使用。2,它与spring boot 2.3一起嵌入。0.0释放(spring-boot-started-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个答案

聂风史
2023-03-14

为了实现预期行为,似乎需要将两种方法结合起来:

appender.rolling.fileName = ${basePath}/log-${date:yyyyMMdd}.log
appender.rolling.filePattern = ${basePath}log-%d{yyyyMMdd}-%i.log
 类似资料:
  • 我已经配置了log4j2.xml文件,application.log文件将被创建,它应该每天翻转。 但是在JVM中,applicatoin.log文件在10MB之后会翻转,如果翻转三次,第一个文件会被覆盖。也就是说我随时都application.logapplication-2020-10-16.log.zip. 为什么log4j2(v2.13)即使配置为每日,也会每10MB滚动一次文件?任何在l

  • 有人能帮我在log4j2.properties中设置rolloverstrategy吗?我已经把它设置成- 我写这篇文章时参考了https://logging.apache.org/log4j/2.x/manual/configuration.html#configurationsyntax 我没有找到任何关于实施翻转策略的东西,你上面看到的是我认为可行的。但不幸的是,显然它不可行。 以下是错误:

  • 我想使用新的log4j2-Java日志框架。一切正常,但我从一小时后就尝试加载一个自定义配置文件来配置日志记录(如日志级别)。 这是我的log4j2.xml: 我尝试了以下方法,但没有任何效果: 移动log4j2.xml文件,使其位于默认包中。 将log4j2.xml文件移动到项目中的任意位置 将log4j2.xml文件命名为log4j.xml 在项目中创建一个文件夹,将log4j2.xml文件放

  • 这是我的配置文件: 日志配置文件读起来非常清楚,因为它使用my/log目录中定义的模式正确地写入。 这是我在代码中实例化它的方式:

  • 我将log4j2与一个JSON属性文件一起使用,我将其命名为log4j2。json并尝试添加Kafka追加器。有很多使用旧格式或xml的示例,但很难在JSON中获得正确的格式。这很可能是一个愚蠢的问题,但我一直在努力让它发挥作用,在任何地方都找不到任何例子。我很想放弃在json中配置log4j2,转而使用XML,但我觉得这应该相当简单。 这是一个用XML定义的示例kafka appender。 l

  • 资源目录还包含。文件是特定于环境的JAR文件的一部分,已经放在类路径中。 日志: