[ 
https://issues.apache.org/jira/browse/LOG4J2-2610?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ralph Goers resolved LOG4J2-2610.
---------------------------------
    Resolution: Fixed

A fix has been applied to both the release-2.x and master branches. Please 
verify and close.

> Windows - File creationTime issue for RollingFileAppender, combined time/size 
> policy
> ------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-2610
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2610
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.11.2
>         Environment: Windows 10, JDK 7u79, Log4J2 2.11.2
>            Reporter: James Chaplin
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 2.12.0
>
>          Time Spent: 3h
>  Remaining Estimate: 0h
>
> Hello Apache Log4j Team.
> Recently I encountered a boundary-condition issue with RollingFileAppender on 
> Windows. Due to the nature of the issue it can be difficult to reproduce 
> consistently, but I was able to do so using some files with old creation 
> dates.
> It was reproduced with a configuration like this modified from one of the 
> unit tests:
> {code:xml}
>     <RollingFile name="RollingFile" 
> fileName="target/rolling3/rollingtest.log" 
> filePattern="target/rolling3/rollingtest_%d\{yyyy-MM-dd}_%i_.log"
>       append="true" bufferedIO="true" bufferSize="8192" immediateFlush="true">
>       <PatternLayout pattern="%d\{yyyy-MM-dd-HH-mm-ss} [%level] [%c] %msg%n"/>
>       <Policies>
>         <TimeBasedTriggeringPolicy interval="1" modulate="true" />
>         <SizeBasedTriggeringPolicy size="3500KB" />
>       </Policies>
>       <DefaultRolloverStrategy max="3"/>
>     </RollingFile>
> {code}
> where the +current and rollover files both share the same directory+. It is 
> easier to see when the date/time of the initial log file "rollingtest.log" 
> has a creationTime that is a few days in the past (simulating a gap in 
> processing between logs due to downtime).
> When the rolling append rolls the file over into one matching filePattern, it 
> creates a +new "rollingtest.log" file+ which has a +creationTIme equal to+ 
> the +old file's creationTime+ (instead of the current system time).
> For example if the current date is 2019-05-30 and the old file's creationTime 
> is sometime in 2019-05-28 (2 days previous), after the rollover the newly 
> created "rolingtest.log" will still have a creationTime of 2019-05-28 ... 
> even though it was just re-created on 2019-05-30. This creates some strange 
> behaviour the next time a rollover is processed by the RollingFileAppender 
> (since the current log file appears to be a "2-day-old file" the 2nd rollover 
> filename is incorrect).
> Going through some of the Log4j2 code it doesn't appear to be a direct bug in 
> Log4j2, but rather due to a Windows behaviour called "File System Tunneling" 
> (see blog [https://devblogs.microsoft.com/oldnewthing/20050715-14/?p=34923] 
> for some details).
> While trying to figure out what was happening I also noticed that the unit 
> test RollingAppenderSizeWithTimeTest.+testAppender()+ was +consistently 
> failing+ under Windows too. Since that test involves very rapid rollovers it 
> could be related to the "tunneling" behaviour in Windows or could be 
> something entirely different.
> I've attempted two mitigation fixes for both issues described in this Jira 
> against the code for 2.12.0-SNAPSHOT. A GitHub PR with an initial fix attempt 
> and unit test should follow soon.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to