[
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)