diff --git a/logging/jboss/src/main/java/io/quarkus/ts/logging/jboss/LogResource.java b/logging/jboss/src/main/java/io/quarkus/ts/logging/jboss/LogResource.java index 06d2164ca..6ef03c822 100644 --- a/logging/jboss/src/main/java/io/quarkus/ts/logging/jboss/LogResource.java +++ b/logging/jboss/src/main/java/io/quarkus/ts/logging/jboss/LogResource.java @@ -51,6 +51,10 @@ public void logExample() { LOG.info("Info log example"); LOG.debug("Debug log example"); LOG.trace("Trace log example"); + + for (int i = 0; i < 10; i++) { + LOG.info("Example log message: " + i); + } } private void addLogMessage(Logger logger, String level, String message) { diff --git a/logging/jboss/src/main/resources/application.properties b/logging/jboss/src/main/resources/application.properties index 636d32f2b..c6888303f 100644 --- a/logging/jboss/src/main/resources/application.properties +++ b/logging/jboss/src/main/resources/application.properties @@ -8,3 +8,9 @@ # By default min-level is set to DEBUG #quarkus.log.min-level=DEBUG quarkus.log.level=TRACE + +quarkus.log.file.enable=true +quarkus.log.file.rotation.file-suffix=.yyyy-MM +# Max file size value is set to this value to ensure that both backup logs are created +quarkus.log.file.rotation.max-file-size=100 +quarkus.log.file.rotation.max-backup-index=2 diff --git a/logging/jboss/src/test/java/io/quarkus/ts/logging/jboss/DefaultMinLogLevelIT.java b/logging/jboss/src/test/java/io/quarkus/ts/logging/jboss/DefaultMinLogLevelIT.java index 7647529e6..b2213064c 100644 --- a/logging/jboss/src/test/java/io/quarkus/ts/logging/jboss/DefaultMinLogLevelIT.java +++ b/logging/jboss/src/test/java/io/quarkus/ts/logging/jboss/DefaultMinLogLevelIT.java @@ -1,14 +1,33 @@ package io.quarkus.ts.logging.jboss; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import org.awaitility.Awaitility; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import io.quarkus.test.bootstrap.RestService; import io.quarkus.test.scenarios.QuarkusScenario; import io.quarkus.test.services.QuarkusApplication; +import io.quarkus.test.utils.FileUtils; @QuarkusScenario public class DefaultMinLogLevelIT { + private static final String LOG_FILE_NAME = "quarkus.log"; + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM"); + private static final String EXPECTED_LOG_MESSAGE = "Example log message"; + @QuarkusApplication static RestService app = new RestService(); @@ -25,4 +44,35 @@ public void checkDefaultLogMinLevel() { // the value of minimum logging level overrides the logging level app.logs().assertDoesNotContain("Trace log example"); } + + @Test + @Tag("https://github.com/quarkusio/quarkus/issues/40016") + public void checkLogRotationContent() throws IOException { + Path logDir = app.getServiceFolder(); + // one main log file plus others rotated + int logFilesNumber = Integer.parseInt(app.getProperty("quarkus.log.file.rotation.max-backup-index").get()) + 1; + + app.given().when().get("/log").then().statusCode(204); + + Awaitility.await().atMost(10, TimeUnit.SECONDS).until(() -> { + File[] rotatedFiles = logDir.toFile().listFiles((dir, name) -> name.startsWith(LOG_FILE_NAME)); + return rotatedFiles != null && rotatedFiles.length == logFilesNumber; + }); + + // Verify that the rotated file with the expected suffix exists + String expectedSuffix = "." + DATE_FORMATTER.format(LocalDate.now()) + "\\.\\d+$"; + List rotatedFiles = Files.list(logDir) + .filter(path -> path.getFileName().toString().matches(LOG_FILE_NAME + expectedSuffix)).toList(); + + assertFalse(rotatedFiles.isEmpty(), "Rotated log files with expected suffix were not found."); + + // Check if rotated files contain the log message + boolean allFilesContainMessage = rotatedFiles.stream() + .allMatch(rotatedFile -> { + String fileContent = FileUtils.loadFile(rotatedFile.toFile()); + return fileContent.contains(EXPECTED_LOG_MESSAGE); + }); + + assertTrue(allFilesContainMessage, "Rotated log files do not contain the expected message " + EXPECTED_LOG_MESSAGE); + } }