This is an automated email from the ASF dual-hosted git repository. pkarwasz pushed a commit to branch 2.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 84862e3ab664eb4b640cb95f02cb85cc3f242292 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Wed Jun 26 09:48:01 2024 +0200 tmp --- .../rolling/RollingAppenderDirectCronTest.java | 62 ++++++++++------------ .../rolling/RollingAppenderDirectCronTest.xml} | 28 +++------- 2 files changed, 36 insertions(+), 54 deletions(-) diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectCronTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectCronTest.java index 429b2c3bdc..ce61c87220 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectCronTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectCronTest.java @@ -16,6 +16,8 @@ */ package org.apache.logging.log4j.core.appender.rolling; +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.waitAtMost; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -23,39 +25,38 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.appender.RollingFileAppender; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.apache.logging.log4j.core.test.junit.Named; +import org.apache.logging.log4j.test.junit.TempLoggingDir; +import org.apache.logging.log4j.test.junit.UsingStatusListener; +import org.assertj.core.api.Assertions; +import org.awaitility.Awaitility; +import org.junit.jupiter.api.Test; -/** - * - */ -public class RollingAppenderDirectCronTest { - - private static final String CONFIG = "log4j-rolling-direct-cron.xml"; - private static final String DIR = "target/rolling-direct-cron"; +@UsingStatusListener +class RollingAppenderDirectCronTest { - private final LoggerContextRule loggerContextRule = - LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG); + private static final Pattern FILE_PATTERN = Pattern.compile("test-(\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2})\\.log"); + private static final Pattern LINE_PATTERN = Pattern.compile("This is test message number \\d+\\."); - @Rule - public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR); - - private final Pattern filePattern = Pattern.compile(".*(\\d\\d-\\d\\d-\\d\\d-\\d\\d-\\d\\d-\\d\\d).*$"); + @TempLoggingDir + private Path loggingPath; @Test - public void testAppender() throws Exception { - // TODO Is there a better way to test than putting the thread to sleep all over the place? - final RollingFileAppender app = loggerContextRule.getAppender("RollingFile"); - final Logger logger = loggerContextRule.getLogger(); - logger.debug("This is test message number 1"); + @LoggerContextSource + void testAppender(final LoggerContext ctx, @Named("RollingFile") final RollingFileAppender app) throws Exception { + final Logger logger = ctx.getLogger(RollingAppenderDirectCronTest.class); + int msgNumber = 1; + logger.debug("This is test message number {}.", msgNumber++); final RolloverDelay delay = new RolloverDelay(app.getManager()); delay.waitForRollover(); final File dir = new File(DIR); @@ -71,7 +72,7 @@ public class RollingAppenderDirectCronTest { delay.waitForRollover(); } - private class RolloverDelay implements RolloverListener { + private static class RolloverDelay implements RolloverListener { private volatile CountDownLatch latch; public RolloverDelay(final RollingFileManager manager) { @@ -80,13 +81,7 @@ public class RollingAppenderDirectCronTest { } public void waitForRollover() { - try { - if (!latch.await(3, TimeUnit.SECONDS)) { - fail("failed to rollover"); - } - } catch (InterruptedException ex) { - fail("failed to rollover"); - } + waitAtMost(3, TimeUnit.SECONDS).until(() -> latch.getCount() == 0); } public void reset(final int count) { @@ -98,11 +93,12 @@ public class RollingAppenderDirectCronTest { @Override public void rolloverComplete(final String fileName) { - final java.util.regex.Matcher matcher = filePattern.matcher(fileName); - assertTrue("Invalid file name: " + fileName, matcher.matches()); - final Path path = new File(fileName).toPath(); + final Path path = Paths.get(fileName); + final Matcher matcher = FILE_PATTERN.matcher(path.getFileName().toString()); + assertThat(matcher).as("Rolled file").matches(); try { final List<String> lines = Files.readAllLines(path); + assertThat assertTrue("Not enough lines in " + fileName + ":" + lines.size(), lines.size() > 0); assertTrue( "log and file times don't match. file: " + matcher.group(1) + ", log: " + lines.get(0), diff --git a/log4j-core-test/src/test/resources/log4j-rolling-direct-cron.xml b/log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectCronTest.xml similarity index 61% rename from log4j-core-test/src/test/resources/log4j-rolling-direct-cron.xml rename to log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectCronTest.xml index 4d659cbc06..f9017646a6 100644 --- a/log4j-core-test/src/test/resources/log4j-rolling-direct-cron.xml +++ b/log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectCronTest.xml @@ -15,33 +15,19 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> -<Configuration status="WARN" name="RollingCronTest" monitorInterval="1"> - +<Configuration xmlns="https://logging.apache.org/xml/ns" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-config-2.xsd" + status="OFF"> <Appenders> - <Console name="STDOUT"> - <PatternLayout pattern="%m%n"/> - </Console> - <RollingFile name="RollingFile" filePattern="target/rolling-direct-cron/test1-%d{MM-dd-yy-HH-mm-ss}.log"> - <PatternLayout> - <Pattern>%d{MM-dd-yy-HH-mm-ss} %p %C{1.} [%t] %m%n</Pattern> - </PatternLayout> + <RollingFile name="RollingFile" filePattern="${test:logging.path}/test-%d{yyyy-MM-dd'T'hh-mm-ss}.log"> + <PatternLayout pattern="%d{yyyy-MM-dd'T'hh-mm-ss} %m%n"/> <CronTriggeringPolicy schedule="* * * * * ?"/> </RollingFile> - <List name="List"> - <Filters> - <ThresholdFilter level="error"/> - </Filters> - </List> </Appenders> - <Loggers> - <Logger name="org.apache.logging.log4j.core.appender.rolling" level="debug" additivity="false"> + <Root level="DEBUG"> <AppenderRef ref="RollingFile"/> - </Logger> - - <Root level="error"> - <AppenderRef ref="STDOUT"/> </Root> </Loggers> - </Configuration>
