RollingFile午夜后未创建新日志



java 1.8

maven 3.5

在pom.xml 中

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>

在我的Mavenjava项目中,我想在新的一天(午夜(生成新的日志文件。

所以我使用RollingFile和cron0 0 0 * * ?。这里是我的log4j2.xml

<Properties>
<Property name="baseDir">logs</Property>
<Property name="patterLayout">%d{[dd.MM.yyyy HH:mm:ss.SSS]} %l %p:%n %m%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${patterLayout}"/>-
</Console>

<RollingFile name="RollingFile" fileName="${baseDir}/app.log"
filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="${patterLayout}"/>-
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
<DefaultRolloverStrategy>
<Delete basePath="${baseDir}" maxDepth="2">
<IfFileName glob="*/app-*.log.gz"/>
<IfLastModified age="60d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>

<Root level="trace">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>

但所有日志都打印在ONE文件app.log中。

此处结果:

[27.11.2021 23:59:05.235] com.myproject.xls2metro2.App.main(App.java:18) TRACE:
JDK: 1.8.0_202
[27.11.2021 23:59:05.238] com.myproject.xls2metro2.App.main(App.java:33) WARN:
File path is mandatory
[28.11.2021 00:01:13.347] com.myproject.xls2metro2.App.main(App.java:18) TRACE:
JDK: 1.8.0_202
[28.11.2021 00:01:13.351] com.myproject.xls2metro2.App.main(App.java:33) WARN:
File path is mandatory

首先,验证您的原始配置是否没有这个连字符(可能是您在写问题时意外添加的(

<PatternLayout pattern="${patterLayout}"/>-

此外,请确保您的代码被封装在Configuration标记中(为了简洁起见,我认为您已经省略了它(:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
... your code here
</Configuration>

其次,您的配置看起来与官方文档示例中的完全相同,所以应该没问题。

但在文件中指出:

CronTriggeringPolicy基于cron表达式触发滚动。此策略由计时器控制,并且与处理异步日志事件,因此可以记录以前或下一个时间段可能出现在日志文件的开头或结尾。Appender的filePattern属性应包含时间戳否则,目标文件将在每次滚动时被覆盖。

很可能,这就是您的情况。只要再等一段时间来验证,下一个日志将被写入一个单独的文件。

最新更新