Log4j2回滚后始终写入同一文件

时间:2018-11-27 16:59:29

标签: java logging log4j2

我正在尝试设置日志,使其每分钟旋转一次。日期和时间戳有效,但是一旦触发翻转,新条目将被写入前一分钟的日志文件中。即它没有在下一分钟创建新的日志文件。

例如。在第一分钟,条目将写入A2018-11-27 11:50.csv 在下一分钟,即使它已经创建了名为2018-11-27 11:50.csv.gz的过渡存档,它仍然会写入A2018-11-27 11:50.csv。它应该创建一个新的日志文件A2018-11-27 11:51.csv。

有什么建议吗?

log4j2.xml

test = structure(list(hldid = c(1, 1, 2, 2, 3, 4, 4, 5, 5, 5, 5, 7, 
7), persid = c(1, 2, 1, 2, 1, 1, 2, 1, 2, 3, 4, 1, 2), age = c(26, 
26, 59, 64, 76, 65, 64, 52, 51, 20, 14, 69, 70), sex = c(2, 1, 
2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2), relresp = c(0, 1, 0, 1, 0, 
0, 1, 0, 1, 21, 21, 0, 1), partner = c(0, 1, 0, 1, 0, 0, 1, 0, 
1, 0, 0, 0, 1), child = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
0)), class = "data.frame", row.names = c(NA, -13L))

someJavafile.java

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" monitorInterval="30">
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
  </Console>
  <Appenders>
    <RollingFile name="HR0" fileName="../logs/m/A${date:yyyy-MM-dd hh:mm}.csv" filePattern="../logs/m/AAA ${date:yyyy-MM-dd hh:mm}.csv">
      <CronTriggeringPolicy schedule="0 * * * * ?" />
    </RollingFile>
  </Appenders>
  <Loggers>
  <Root level="info">
    <AppenderRef ref="Console"/>
  </Root>
  <Logger name="HR0" additivity="false" level="info">
    <AppenderRef ref="HR0" />
  </Logger>
</Configuration>

1 个答案:

答案 0 :(得分:1)

我设法根据log4j2中的这张吉拉票找出了答案: https://issues.apache.org/jira/browse/LOG4J2-1185

我将在这里发布我的工作解决方案。我正在使用log4j2 2.11.1

解决方法是删除“ fileName”,并在文件模式中使用%d而不是$

<RollingFile name="HR0" filePattern="../logs/measure/%d{yyyy-MM-dd hh:mm}.csv">
  <CronTriggeringPolicy schedule="0 * * * * ?" />
</RollingFile>