You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2019/08/01 15:45:36 UTC
[logging-log4j2] branch master updated: [LOG4j2-1946] Fix problem
with purgeAscending if an old file was deleted
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 572eccd [LOG4j2-1946] Fix problem with purgeAscending if an old file was deleted
new 05ab7bf Merge pull request #299 from IgorPerelyotov/LOG4J2-1946
572eccd is described below
commit 572eccde1ce98a3ff25e34e088b6e15b76b4c196
Author: Igor Perelyotov <pe...@mail.ru>
AuthorDate: Sat Jul 27 08:33:04 2019 +0300
[LOG4j2-1946] Fix problem with purgeAscending if an old file was deleted
---
.../appender/rolling/DefaultRolloverStrategy.java | 2 +-
.../rolling/RolloverWithDeletedOldFileTest.java | 82 ++++++++++++++++++++++
2 files changed, 83 insertions(+), 1 deletion(-)
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
index bd8f986..4b27223 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
@@ -357,7 +357,7 @@ public class DefaultRolloverStrategy extends AbstractRolloverStrategy {
final SortedMap<Integer, Path> eligibleFiles = getEligibleFiles(manager);
final int maxFiles = highIndex - lowIndex + 1;
- boolean renameFiles = false;
+ boolean renameFiles = !eligibleFiles.isEmpty() && eligibleFiles.lastKey() >= maxIndex;
while (eligibleFiles.size() >= maxFiles) {
try {
LOGGER.debug("Eligible files: {}", eligibleFiles);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithDeletedOldFileTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithDeletedOldFileTest.java
new file mode 100644
index 0000000..7956024
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithDeletedOldFileTest.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.core.appender.rolling;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests that files were rolled correctly if an old log file was deleted from the directory.
+ */
+public class RolloverWithDeletedOldFileTest {
+ private static final String CONFIG = "log4j-rolling-with-padding.xml";
+ private static final String DIR = "target/rolling-with-padding";
+
+ private final LoggerContextRule loggerContextRule = LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG);
+
+ @Rule
+ public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR);
+
+ @Test
+ public void testAppender() throws Exception {
+ final Logger logger = loggerContextRule.getLogger();
+ for (int i = 0; i < 10; ++i) {
+ // 30 chars per message: each message triggers a rollover
+ logger.fatal("This is a test message number " + i); // 30 chars:
+ }
+ Thread.sleep(100); // Allow time for rollover to complete
+
+ final File dir = new File(DIR);
+ assertTrue("Dir " + DIR + " should exist", dir.exists());
+ assertTrue("Dir " + DIR + " should contain files", dir.listFiles().length == 6);
+
+ File[] files = dir.listFiles();
+ final List<String> expected = Arrays.asList("rollingtest.log", "test-001.log", "test-002.log", "test-003.log", "test-004.log", "test-005.log");
+ assertEquals("Unexpected number of files", expected.size(), files.length);
+ File fileToRemove = null;
+ for (final File file : files) {
+ if (!expected.contains(file.getName())) {
+ fail("unexpected file" + file);
+ }
+ if (file.getName().equals("test-001.log")) {
+ fileToRemove = file;
+ }
+ }
+ fileToRemove.delete();
+ for (int i = 0; i < 10; ++i) {
+ // 30 chars per message: each message triggers a rollover
+ logger.fatal("This is a test message number " + i); // 30 chars:
+ }
+ Thread.sleep(100); // Allow time for rollover to complete again
+ files = dir.listFiles();
+ assertEquals("Unexpected number of files", expected.size(), files.length);
+ for (final File file : files) {
+ if (!expected.contains(file.getName())) {
+ fail("unexpected file" + file);
+ }
+ }
+ }
+}