[
https://issues.apache.org/jira/browse/LOG4J2-1906?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
João Santos updated LOG4J2-1906:
--------------------------------
Description:
The DirectWriteRolloverStrategy is not properly determining the filename of the
new log file after the rollover happens.
With the following configuration:
{noformat}
<RollingFile name="ApplicationLog"
filePattern="application.log.%d{yyyy-MM-dd-HH-mm}">
<PatternLayout>
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy />
</Policies>
<DirectWriteRolloverStrategy />
</RollingFile>
{noformat}
What is happening is, for instance:
- application starts at 09h35m30s
- at instant 09h35m55s a new log is written the rollover is set to happen at
09h36m00s, log line is written to application.log.2017-05-10-09-35 - OK
- at instant 09h36m05s a new log is written and the rollover is triggered,
after the rollover logs are written to application.log.2017-05-10-09-35 - Not OK
- at instant 09h37m05s a new log is written and the rollover is triggered,
after the rollover logs are written to application.log.2017-05-10-09-36 - Not OK
This seems to be happening because
DirectWriteRolloverStrategy.getCurrentFileName is calling the
PatternProcessor.formatFileName and telling it to use the currentTime. However,
currentFileTime is zero, and it will fallback to the prevFileTime to determine
the filename, which is wrong as it will be one minute before current time.
It should probably either use the nextFileTime (while debugging I could see
that it was set to the correct time, the minute I expect the file to rollover),
or use the System time.
was:
The DirectWriteRolloverStrategy is not properly determining the filename of the
new log file after the rollover happens.
With the following configuration:
{noformat}
<RollingFile name="ApplicationLog"
filePattern="application.log.%d{yyyy-MM-dd-HH-mm}">
<PatternLayout>
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy />
</Policies>
<DirectWriteRolloverStrategy />
</RollingFile>
{noformat}
What is happening is, for instance:
- at instant 09h35m55s the rollover is set to happen at 09h36m00s, log line is
written to application.log.2017-05-10-09-35} - OK
- at instant 09h36m05s a new log is written and the rollover is triggered,
after the rollover logs are written to application.log.2017-05-10-09-35} - Not
OK
- at instant 09h37m05s a new log is written and the rollover is triggered,
after the rollover logs are written to application.log.2017-05-10-09-36} - Not
OK
This seems to be happening because
DirectWriteRolloverStrategy.getCurrentFileName is calling the
PatternProcessor.formatFileName and telling it to use the currentTime. However,
currentFileTime is zero, and it will fallback to the prevFileTime to determine
the filename, which is wrong as it will be one minute before current time.
It should probably either use the nextFileTime (while debugging I could see
that it was set to the correct time, the minute I expect the file to rollover),
or use the System time.
> DirectWriteRolloverStrategy not properly creating files
> -------------------------------------------------------
>
> Key: LOG4J2-1906
> URL: https://issues.apache.org/jira/browse/LOG4J2-1906
> Project: Log4j 2
> Issue Type: Bug
> Affects Versions: 2.8.2
> Reporter: João Santos
>
> The DirectWriteRolloverStrategy is not properly determining the filename of
> the new log file after the rollover happens.
> With the following configuration:
> {noformat}
> <RollingFile name="ApplicationLog"
> filePattern="application.log.%d{yyyy-MM-dd-HH-mm}">
> <PatternLayout>
> <Pattern>%m%n</Pattern>
> </PatternLayout>
> <Policies>
> <TimeBasedTriggeringPolicy />
> <SizeBasedTriggeringPolicy />
> </Policies>
> <DirectWriteRolloverStrategy />
> </RollingFile>
> {noformat}
> What is happening is, for instance:
> - application starts at 09h35m30s
> - at instant 09h35m55s a new log is written the rollover is set to happen at
> 09h36m00s, log line is written to application.log.2017-05-10-09-35 - OK
> - at instant 09h36m05s a new log is written and the rollover is triggered,
> after the rollover logs are written to application.log.2017-05-10-09-35 - Not
> OK
> - at instant 09h37m05s a new log is written and the rollover is triggered,
> after the rollover logs are written to application.log.2017-05-10-09-36 - Not
> OK
> This seems to be happening because
> DirectWriteRolloverStrategy.getCurrentFileName is calling the
> PatternProcessor.formatFileName and telling it to use the currentTime.
> However, currentFileTime is zero, and it will fallback to the prevFileTime to
> determine the filename, which is wrong as it will be one minute before
> current time.
> It should probably either use the nextFileTime (while debugging I could see
> that it was set to the correct time, the minute I expect the file to
> rollover), or use the System time.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)