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

Ralph Goers resolved LOG4J2-2485.
---------------------------------
       Resolution: Fixed
    Fix Version/s: 2.11.2

Patch applied. Please verify and close.

> SizeBasedTriggeringPolicy is not honored when using the 
> DirectWriteRolloverStrategy if the machine restarts
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-2485
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2485
>             Project: Log4j 2
>          Issue Type: Bug
>            Reporter: Giovanni Matteo Fumarola
>            Priority: Major
>             Fix For: 2.11.2
>
>         Attachments: LOG4J2-2485.v1.patch, LOG4J2-2485.v2.patch
>
>
> We are working on migrate Log4J to Log4J2 in Hadoop codebase.
> It seems like the SizeBasedTriggeringPolicy is not honored when using the 
> DirectWriteRolloverStrategy if the machine restarts before it writes the size 
> limit specified in the policy. We are coming across an issue where if a 
> process using Log4j2 restarts continuously in a short time period, the size 
> of the most recently created log will grow indefinitely.
> The behavior we expect is for the log output to always be written to the most 
> recently created file by the RollingFile appender, and for the log file size 
> to never exceed what was specified in the SizeBasedTriggeringPolicy.
> Our setup uses SLF4J and Log4j2 using the Log4j 1.2 API.
> In reproducing the issue locally, I took an example of the usage of the 
> DirectWriteRolloverStrategy from 
> [https://logging.apache.org/log4j/2.x/manual/appenders.html#TriggeringPolicies]
>  and modified it slightly to not compress the archived files. Here is the 
> code used.
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="INFO">
>   <Appenders>
>     <RollingFile name="file" filePattern="logs/app-%d\{yyyy-MM-dd-HH}-%i.log">
>       <PatternLayout>
>         <Pattern>%d %p %c\{1.} [%t] %m%n</Pattern>
>       </PatternLayout>
>       <Policies>
>         <SizeBasedTriggeringPolicy size="250 MB"/>
>       </Policies>
>       <DirectWriteRolloverStrategy maxFiles="10"/>
>     </RollingFile>
>   </Appenders>
>   <Loggers>
>     <Root level="debug">
>       <AppenderRef ref="file"/>
>     </Root>
>   </Loggers>
> </Configuration>
> {code}
>  
> {code:java}
> package com.test;
>  
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
>  
> public class Test {
>   private static Logger logger = LoggerFactory.getLogger(Test.class);
>  
>   public static void main(String[] args)
>   {
>     while (true)
>     {
>       logger.info("test");
>     }
>   }
> }
> {code}
>  
> First I ran this such that the log generated would be somewhere around half 
> the size limit specified.
>  
> {code:java}
> -rw-r--r-- 1 iapicker 1049089 251M Oct 22 12:53 app-2018-10-22-12-1.log
> -rw-r--r-- 1 iapicker 1049089 121M Oct 22 12:53 app-2018-10-22-12-2.log
> {code}
>  
> Then I ran it again, and noted the file sizes generated:
>  
> {code:java}
> -rw-r--r-- 1 iapicker 1049089 251M Oct 22 12:53 app-2018-10-22-12-1.log
> -rw-r--r-- 1 iapicker 1049089 371M Oct 22 12:55 app-2018-10-22-12-2.log
> -rw-r--r-- 1 iapicker 1049089 251M Oct 22 12:56 app-2018-10-22-12-3.log
> -rw-r--r-- 1 iapicker 1049089  48M Oct 22 12:56 app-2018-10-22-12-4.log
> {code}
> Here, the second log which was 121M at the time the first run finished now 
> exceeds the 250M limit specified in the SizeBasedTriggeringPolicy. If another 
> 250M is written to the same file without a restart happening, the behavior 
> becomes what we expect.
> Internally, this could be caused by the inability to specify a fileName 
> parameter in DirectWriteRolloverStrategy, because the file specified with 
> fileName is used for tracking the amount written to the log so far when Log4j 
> first starts up. Otherwise, the size written so far would become zero.The 
> Log4j version used is 2.11.0. Here is the full list of the Maven dependencies 
> used.
> {code:java}
> <dependencies>
>     <dependency>
>       <groupId>org.apache.logging.log4j</groupId>
>       <artifactId>log4j-api</artifactId>
>       <version>2.11.0</version>
>     </dependency>
>     <dependency>
>       <groupId>org.apache.logging.log4j</groupId>
>       <artifactId>log4j-core</artifactId>
>       <version>2.11.0</version>
>     </dependency>
>     <dependency>
>       <groupId>org.apache.logging.log4j</groupId>
>       <artifactId>log4j-slf4j-impl</artifactId>
>       <version>2.11.0</version>
>     </dependency>
>     <dependency>
>       <groupId>org.apache.logging.log4j</groupId>
>       <artifactId>log4j-1.2-api</artifactId>
>       <version>2.11.0</version>
>     </dependency>
>     <dependency>
>       <groupId>org.apache.logging.log4j</groupId>
>       <artifactId>log4j-iostreams</artifactId>
>       <version>2.11.0</version>
>     </dependency>
>   </dependencies>
> {code}
>  



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

Reply via email to