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

log4j2-TimeBasedTriggeringPolicy启用时未写入RollingFile

乐修远
2023-03-14

Log4j2在读取我的RollingFile appender的filePattern中的日期时遇到了困难。当我添加一个TimeBasedTriggeringPolicy并重新配置我的配置文件时,我会得到以下错误:

如果注释掉TimeBasedTriggeringPolicy,则追加器开始工作并将日志写入我的文件。

以下是POM中的log4j依赖项:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.7</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.7</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
  <version>2.7</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-web</artifactId>
  <version>2.6.2</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>1.7.7</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.7</version>
</dependency>

下面是我的log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="30" status="DEBUG">
    <Properties>
        <Property name="baseDir">/logs/oracle/domains/cim</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%highlight{%d{DEFAULT} [%t] %-5p %c -%m%n}"/>
        </Console>
        <RollingFile name="RollingFile" fileName="${baseDir}/cim.log"
            filePattern="${baseDir}/cim-%d{yyyy-MM-dd}.log" append="true">
            <PatternLayout pattern="%d{DEFAULT} %-5p %c - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="31"/>
        </RollingFile>
    </Appenders>
  <Loggers>
    <Logger name="com.cim" level="debug" additivity="true">
        <Appender-Ref ref="RollingFile"/>
    </Logger>
    <Root level="debug" additivity="false">
        <Appender-Ref ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNextTime(PatternProcessor.java:119)
    at org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy.initialize(TimeBasedTriggeringPolicy.java:59)
    at org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy.initialize(CompositeTriggeringPolicy.java:52)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.setTriggeringPolicy(RollingFileManager.java:216)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.updateData(RollingFileManager.java:439)
    at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:119)
    at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:128)
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:135)
    at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:58)
    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:942)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:882)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:874)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:498)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:227)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:239)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:530)
    at org.apache.logging.log4j.core.LoggerContext.onChange(LoggerContext.java:653)
    at org.apache.logging.log4j.core.config.ConfiguratonFileWatcher$ReconfigurationRunnable.run(ConfiguratonFileWatcher.java:65)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

共有1个答案

郎宏逸
2023-03-14

错误消息“模式不包含日期”显然是错误的,因为您的模式是filepattern=“${baseDir}/cim-%d{yyyy-MM-dd}.log”,其中确实包含日期

然而,模式有一个问题。您确实指定了两个触发策略,一个是基于日期的策略,另一个是基于大小的策略。

sizeBasedTriggeringPolicy还需要filePattern中的某些内容,特别是%i,因为当此策略触发时,它需要将文件重命名为某些内容。

使用基于大小的策略,您通常会得到如下所示的一堆滚动日志文件:

app-1.log
app-2.log
app-3.log
...

filePattern需要包含%i转换模式,以告诉Log4j2将计数器放在哪里,否则它将无法重命名文件。

 类似资料:
  • 在中有一个,可以将日志写入到。 我需要在中使用相同的功能,但我还没有找到这样做的选项。有人知道如何使用实现同样的效果吗?

  • 我使用带有yaml配置的Log4j2。将日志记录到控制台工作得很好,每次都会创建一个外部日志文件,但它没有条目。谢谢你的提示。 src/Main/java/my/example/log/: 创建但为空的文件是

  • 理想情况下,我想在localhost上记录开发过程中的一切,只记录实时服务器上的错误。我在我的开发平台(Windows 10,JavaWicket)上无法登录文件。 log4j2.xml 我已经设法得到一些日志写入我tomcat的文件夹。 只有我的一些信息出现了。我不知道什么符号有意义,什么符号没有意义。 可公开访问页面的基页记录子类。 [信息]2017-10-19 17:07:13.208[ht

  • 我刚开始使用log4j2 我正在尝试配置xml,以便使用和附加符将日志发送到日志文件中。这个附加器工作得很好。我想使用appender,这样它就可以每天清除日志文件,但是当它第一次创建日志文件时,它没有将任何日志消息写入创建的文件中,所以我来这里是为了得到一些建议

  • 我正在Servlet 3.0和Tomcat中做一个简单的演示项目 我接受邮递员的JSON请求并提供JSON响应。 现在我也想在我的项目中做日志记录。 所以我使用log4j2 罐子使用:- log4j-1.2.12.jar, jackson-databind-2.6.3.jar, jackson-core-2.6.3.jar Servlet代码:- 我的项目目录:- 我的log4j。xml 当我在e

  • 我最近升级了我的应用程序以使用log4j2。我正在尝试利用它的异步记录器特性。然而,看起来它并没有创建一个。根据Log4j异步配置,它说, 要使所有记录器都是异步的,请将中断器jar添加到类路径中,并将系统属性Log4jContextSelector设置为org.apache.logging.log4j.core.async.AsyncloggerContextSelector。我还设置了log4