This is an automated email from the ASF dual-hosted git repository.

rgoers pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/master by this push:
     new b137f44  LOG4J2-2981 - OnStartupTriggeringPolicy would fail to cause 
the file to roll over with DirectWriteTriggeringPolicy unless minSize was set 
to 0
b137f44 is described below

commit b137f443872c07336080f6d6b41b03a5ed915f26
Author: Ralph Goers <[email protected]>
AuthorDate: Sun Feb 28 20:50:20 2021 -0700

    LOG4J2-2981 - OnStartupTriggeringPolicy would fail to cause the file to 
roll over with DirectWriteTriggeringPolicy unless minSize was set to 0
---
 .../core/appender/rolling/RollingFileManager.java  | 17 ++---
 ...ava => RollingAppenderOnStartupDirectTest.java} | 79 ++++++++++------------
 .../rolling/RollingAppenderOnStartupTest.java      | 68 ++++++++-----------
 .../src/test/resources/__files/onStartup.log       | 19 +-----
 .../{log4j-test4.xml => log4j-rollOnStartup.xml}   |  8 ++-
 ...g4j-test4.xml => log4j-rollOnStartupDirect.xml} | 11 +--
 src/changes/changes.xml                            |  4 ++
 7 files changed, 93 insertions(+), 113 deletions(-)

diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
index 4476d9b..7950714 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
@@ -111,18 +111,19 @@ public class RollingFileManager extends FileManager {
         if (!initialized) {
             LOGGER.debug("Initializing triggering policy {}", 
triggeringPolicy);
             initialized = true;
-            triggeringPolicy.initialize(this);
-            if (triggeringPolicy instanceof LifeCycle) {
-                ((LifeCycle) triggeringPolicy).start();
-            }
+            // LOG4J2-2981 - set the file size before initializing the 
triggering policy.
             if (directWrite) {
                 // LOG4J2-2485: Initialize size from the most recently written 
file.
                 File file = new File(getFileName());
                 if (file.exists()) {
                     size = file.length();
-                               } else {
-                                       ((DirectFileRolloverStrategy) 
rolloverStrategy).clearCurrentFileName();
-                               }
+                } else {
+                    ((DirectFileRolloverStrategy) 
rolloverStrategy).clearCurrentFileName();
+                }
+            }
+            triggeringPolicy.initialize(this);
+            if (triggeringPolicy instanceof LifeCycle) {
+                ((LifeCycle) triggeringPolicy).start();
             }
         }
     }
@@ -291,7 +292,7 @@ public class RollingFileManager extends FileManager {
        }
 
     public synchronized void rollover() {
-        if (!hasOutputStream() && !isCreateOnDemand()) {
+        if (!hasOutputStream() && !isCreateOnDemand() && !isDirectWrite()) {
             return;
         }
         if (rollover(rolloverStrategy)) {
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupDirectTest.java
similarity index 60%
copy from 
log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupTest.java
copy to 
log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupDirectTest.java
index 5b5a683..4de059b 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupDirectTest.java
@@ -25,48 +25,35 @@ import java.nio.file.StandardCopyOption;
 import java.nio.file.attribute.BasicFileAttributeView;
 import java.nio.file.attribute.FileTime;
 import java.time.Instant;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configurator;
 import org.junit.AfterClass;
-import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 /**
  *
  */
-public class RollingAppenderOnStartupTest {
+public class RollingAppenderOnStartupDirectTest {
 
     private static final String SOURCE = "src/test/resources/__files";
     private static final String DIR = "target/onStartup";
-    private static final String CONFIG = "log4j-test4.xml";
+    private static final String CONFIG = "log4j-rollOnStartupDirect.xml";
     private static final String FILENAME = "onStartup.log";
+    private static final String PREFIX = "This is test message number ";
+    private static final String ROLLED = "onStartup-";
+    private static final DateTimeFormatter formatter = 
DateTimeFormatter.ofPattern("MM-dd-yyyy");
 
-    private Logger logger;
-
-    @Rule
-    public LoggerContextRule loggerContextRule;
-
-    public RollingAppenderOnStartupTest() {
-        this.loggerContextRule = 
LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        this.logger = 
this.loggerContextRule.getLogger(RollingAppenderOnStartupTest.class.getName());
-    }
+    private static LoggerContext loggerContext;
 
     @BeforeClass
     public static void beforeClass() throws Exception {
@@ -79,36 +66,44 @@ public class RollingAppenderOnStartupTest {
             }
         }
         Files.createDirectory(new File(DIR).toPath());
-        Path target = Paths.get(DIR, FILENAME);
+        String fileName = ROLLED + formatter.format(LocalDate.now()) + 
"-1.log";
+        Path target = Paths.get(DIR, fileName);
         Files.copy(Paths.get(SOURCE, FILENAME), target, 
StandardCopyOption.COPY_ATTRIBUTES);
         FileTime newTime = FileTime.from(Instant.now().minus(1, 
ChronoUnit.DAYS));
         Files.getFileAttributeView(target, 
BasicFileAttributeView.class).setTimes(newTime, newTime, newTime);
     }
 
-    @AfterClass
-    public static void afterClass() throws Exception {
+    @Test
+    public void performTest() throws Exception {
+        loggerContext = Configurator.initialize("Test", CONFIG);
+        final Logger logger = 
loggerContext.getLogger(RollingAppenderOnStartupDirectTest.class);
+        for (int i = 3; i < 10; ++i) {
+            logger.debug(PREFIX + i);
+        }
+        int fileCount = 0;
         try (DirectoryStream<Path> directoryStream = 
Files.newDirectoryStream(Paths.get(DIR))) {
-            boolean rolled = false;
             for (final Path path : directoryStream) {
-                if (!path.toFile().getName().endsWith(FILENAME)) {
-                    rolled = true;
-                }
-                try (Stream<String> stream = Files.lines(path)) {
-                    List<String> lines = stream.collect(Collectors.toList());
-                    assertTrue("No header present for " + 
path.toFile().getName(), lines.get(0).startsWith("<!DOCTYPE HTML"));
+                ++fileCount;
+                if (path.toFile().getName().startsWith(ROLLED)) {
+                    List<String> lines = Files.readAllLines(path);
+                    assertTrue("No messages in " + path.toFile().getName(), 
lines.size() > 0);
+                    assertTrue("Missing message for " + 
path.toFile().getName(),
+                            lines.get(0).startsWith(PREFIX));
                 }
-                Files.delete(path);
             }
-            assertTrue("File did not roll", rolled);
         }
-        Files.delete(Paths.get("target/onStartup"));
+        assertEquals("File did not roll", 2, fileCount);
     }
 
-    @Test
-    public void testAppender() throws Exception {
-        for (int i = 0; i < 100; ++i) {
-            logger.debug("This is test message number " + i);
+    @AfterClass
+    public static void afterClass() throws Exception {
+        try (DirectoryStream<Path> directoryStream = 
Files.newDirectoryStream(Paths.get(DIR))) {
+            for (final Path path : directoryStream) {
+                Files.delete(path);
+            }
         }
-
+        Files.delete(Paths.get(DIR));
+        Configurator.shutdown(loggerContext);
     }
+
 }
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupTest.java
index 5b5a683..4d1b6a2 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderOnStartupTest.java
@@ -26,21 +26,14 @@ import java.nio.file.attribute.BasicFileAttributeView;
 import java.nio.file.attribute.FileTime;
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configurator;
 import org.junit.AfterClass;
-import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 
 import static org.junit.Assert.assertTrue;
 
@@ -51,22 +44,12 @@ public class RollingAppenderOnStartupTest {
 
     private static final String SOURCE = "src/test/resources/__files";
     private static final String DIR = "target/onStartup";
-    private static final String CONFIG = "log4j-test4.xml";
+    private static final String CONFIG = "log4j-rollOnStartup.xml";
     private static final String FILENAME = "onStartup.log";
+    private static final String PREFIX = "This is test message number ";
+    private static final String ROLLED = "onStartup-";
 
-    private Logger logger;
-
-    @Rule
-    public LoggerContextRule loggerContextRule;
-
-    public RollingAppenderOnStartupTest() {
-        this.loggerContextRule = 
LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        this.logger = 
this.loggerContextRule.getLogger(RollingAppenderOnStartupTest.class.getName());
-    }
+    private static LoggerContext loggerContext;
 
     @BeforeClass
     public static void beforeClass() throws Exception {
@@ -85,30 +68,37 @@ public class RollingAppenderOnStartupTest {
         Files.getFileAttributeView(target, 
BasicFileAttributeView.class).setTimes(newTime, newTime, newTime);
     }
 
-    @AfterClass
-    public static void afterClass() throws Exception {
+    @Test
+    public void performTest() throws Exception {
+        boolean rolled = false;
+        loggerContext = Configurator.initialize("Test", CONFIG);
+        final Logger logger = 
loggerContext.getLogger(RollingAppenderOnStartupTest.class);
+        for (int i = 3; i < 10; ++i) {
+            logger.debug(PREFIX + i);
+        }
         try (DirectoryStream<Path> directoryStream = 
Files.newDirectoryStream(Paths.get(DIR))) {
-            boolean rolled = false;
             for (final Path path : directoryStream) {
-                if (!path.toFile().getName().endsWith(FILENAME)) {
+                if (path.toFile().getName().startsWith(ROLLED)) {
                     rolled = true;
+                    List<String> lines = Files.readAllLines(path);
+                    assertTrue("No messages in " + path.toFile().getName(), 
lines.size() > 0);
+                    assertTrue("Missing message for " + 
path.toFile().getName(),
+                            lines.get(0).startsWith(PREFIX + "1"));
                 }
-                try (Stream<String> stream = Files.lines(path)) {
-                    List<String> lines = stream.collect(Collectors.toList());
-                    assertTrue("No header present for " + 
path.toFile().getName(), lines.get(0).startsWith("<!DOCTYPE HTML"));
-                }
-                Files.delete(path);
             }
-            assertTrue("File did not roll", rolled);
         }
-        Files.delete(Paths.get("target/onStartup"));
+        assertTrue("File did not roll", rolled);
     }
 
-    @Test
-    public void testAppender() throws Exception {
-        for (int i = 0; i < 100; ++i) {
-            logger.debug("This is test message number " + i);
+    @AfterClass
+    public static void afterClass() throws Exception {
+        try (DirectoryStream<Path> directoryStream = 
Files.newDirectoryStream(Paths.get(DIR))) {
+            for (final Path path : directoryStream) {
+                Files.delete(path);
+            }
         }
-
+        Files.delete(Paths.get(DIR));
+        Configurator.shutdown(loggerContext);
     }
+
 }
diff --git a/log4j-core/src/test/resources/__files/onStartup.log 
b/log4j-core/src/test/resources/__files/onStartup.log
index 036b721..6775010 100644
--- a/log4j-core/src/test/resources/__files/onStartup.log
+++ b/log4j-core/src/test/resources/__files/onStartup.log
@@ -1,16 +1,3 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
-<html>
-<head>
-<meta charset="UTF-8"/>
-<title>Log4j Log Messages</title>
-<style type="text/css">
-<!--
-body, table {font-family:arial,sans-serif; font-size: medium
-;}th {background: #336699; color: #FFFFFF; text-align: left;}
--->
-</style>
-</head>
-<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
-
-<br>
-</body></html>
\ No newline at end of file
+This is test message number 1
+This is test message number 2
+This is test message number 3
\ No newline at end of file
diff --git a/log4j-core/src/test/resources/log4j-test4.xml 
b/log4j-core/src/test/resources/log4j-rollOnStartup.xml
similarity index 84%
copy from log4j-core/src/test/resources/log4j-test4.xml
copy to log4j-core/src/test/resources/log4j-rollOnStartup.xml
index a1ee305..c7b26fa 100644
--- a/log4j-core/src/test/resources/log4j-test4.xml
+++ b/log4j-core/src/test/resources/log4j-rollOnStartup.xml
@@ -16,13 +16,15 @@
  limitations under the License.
 
 -->
-<Configuration status="OFF" name="XMLConfigTest" monitorInterval="1">
+<Configuration status="WARN" name="XMLConfigTest" monitorInterval="1">
   <Appenders>
     <RollingFile name="RollingFile" fileName="target/onStartup/onStartup.log"
                  
filePattern="target/onStartup/onStartup-%d{MM-dd-yyyy}-%i.log">
-      <HTMLLayout title="test"/>
+      <PatternLayout>
+        <Pattern>%m%n</Pattern>
+      </PatternLayout>
       <Policies>
-        <OnStartupTriggeringPolicy />
+        <OnStartupTriggeringPolicy minSize="10"/>
       </Policies>
     </RollingFile>
   </Appenders>
diff --git a/log4j-core/src/test/resources/log4j-test4.xml 
b/log4j-core/src/test/resources/log4j-rollOnStartupDirect.xml
similarity index 76%
rename from log4j-core/src/test/resources/log4j-test4.xml
rename to log4j-core/src/test/resources/log4j-rollOnStartupDirect.xml
index a1ee305..2e0f004 100644
--- a/log4j-core/src/test/resources/log4j-test4.xml
+++ b/log4j-core/src/test/resources/log4j-rollOnStartupDirect.xml
@@ -16,13 +16,14 @@
  limitations under the License.
 
 -->
-<Configuration status="OFF" name="XMLConfigTest" monitorInterval="1">
+<Configuration status="WARN" name="XMLConfigTest" monitorInterval="1">
   <Appenders>
-    <RollingFile name="RollingFile" fileName="target/onStartup/onStartup.log"
-                 
filePattern="target/onStartup/onStartup-%d{MM-dd-yyyy}-%i.log">
-      <HTMLLayout title="test"/>
+    <RollingFile name="RollingFile" 
filePattern="target/onStartup/onStartup-%d{MM-dd-yyyy}-%i.log">
+      <PatternLayout>
+        <Pattern>%m%n</Pattern>
+      </PatternLayout>
       <Policies>
-        <OnStartupTriggeringPolicy />
+        <OnStartupTriggeringPolicy minSize="10"/>
       </Policies>
     </RollingFile>
   </Appenders>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8b6f0f2..e99ffea 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -227,6 +227,10 @@
       </action>
     </release>
     <release version="2.14.1" date="2020-MM-DD" description="GA Release 
2.14.1">
+      <action issue="LOG4J2-2981" dev="rgoers" type="fix">
+        OnStartupTriggeringPolicy would fail to cause the file to roll over 
with DirectWriteTriggeringPolicy
+        unless minSize was set to 0.
+      </action>
       <action issue="LOG4J2-2893" dev="rgoers" type="update">
         Allow reconfiguration when Log4j 1 configuration files are updated.
       </action>

Reply via email to