You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Shlomi Hazan (JIRA)" <ji...@apache.org> on 2017/02/23 16:36:44 UTC

[jira] [Created] (LOG4J2-1821) (not only) default rollover strategy is *broken*

Shlomi Hazan created LOG4J2-1821:
------------------------------------

             Summary: (not only) default rollover strategy is *broken*
                 Key: LOG4J2-1821
                 URL: https://issues.apache.org/jira/browse/LOG4J2-1821
             Project: Log4j 2
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.8
         Environment: Java 1.8
            Reporter: Shlomi Hazan
            Priority: Blocker
             Fix For: 2.8.1


A previously working <DefaultRolloverStrategy max="10" /> is broken on v2.8, while working against 2.7, as only one rollover file is available. here is a MCVE:
=================================================
log4j2.xml
=================================================
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="2" status="TRACE">
  <Appenders>  
    <RollingFile name="rollingFileSync" fileName="logs/rolling.log" filePattern="logs/rolling.log.%i.gz">
      <PatternLayout pattern="%d %-5level %c{1.} - %msg%n" />
      <SizeBasedTriggeringPolicy size="100 KB" />
      <DefaultRolloverStrategy max="10" />
    </RollingFile>
    <Async name="rollingFileAsync" blocking="false">
      <AppenderRef ref="rollingFileSync" />
    </Async>    
  </Appenders>
  <Loggers>
    <Root level="TRACE">
      <AppenderRef ref="rollingFileAsync" />
    </Root>
  </Loggers>  
</Configuration>
=================================================
code:
public static void main(String[] args) {
System.setProperty("log4j.configurationFile", "log4j2.xml");		
		final Logger logger = LogManager.getLogger(RollingFileWithXmlConfigurationTest.class);		
		int numRecords = 10 * 1000* 1000;
for (int i = 0; i < numRecords; i++) {
			logger.log(Level.INFO, "The time is: " + System.nanoTime());
		}
	}
=================================================
Here is a lead fixing the MCVE:
$ git diff
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
index 7981c7cc0..35f3cb1fb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.java
@@ -105,7 +105,7 @@ public abstract class AbstractRolloverStrategy implements RolloverStrategy {
         File file = new File(path);
         File parent = file.getParentFile();
         parent.mkdirs();
-        if (!path.contains("--1")) {
+        if (!path.contains("-1")) {
             return eligibleFiles;
         }
         Path dir = parent.toPath();
@@ -114,7 +114,7 @@ public abstract class AbstractRolloverStrategy implements RolloverStrategy {
         if (suffixLength > 0) {
             fileName = fileName.substring(0, fileName.length() - suffixLength) + ".*";
         }
-        String filePattern = fileName.replace("--1", "-(\\d+)");
+        String filePattern = fileName.replace("-1", "(\\d+)");
         Pattern pattern = Pattern.compile(filePattern);

         try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {




--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org