From 310ef8bed4afc117b6e9c310ecb8341195917bfc Mon Sep 17 00:00:00 2001 From: AI Lab VPS <277152186+BrunosGits@users.noreply.github.com> Date: Tue, 25 Aug 2026 21:05:34 -0300 Subject: [PATCH 1/2] fix: avoid getDockerImageName() in debug logging when disabled Closes #9876 --- build.gradle | 2 +- .../org/testcontainers/containers/GenericContainer.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index f405ea2b92c..4008ac0ce63 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ subprojects { java { toolchain { - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) } } diff --git a/core/src/main/java/org/testcontainers/containers/GenericContainer.java b/core/src/main/java/org/testcontainers/containers/GenericContainer.java index 4d3778c63d1..7345a1efd56 100644 --- a/core/src/main/java/org/testcontainers/containers/GenericContainer.java +++ b/core/src/main/java/org/testcontainers/containers/GenericContainer.java @@ -325,7 +325,7 @@ protected void doStart() { configure(); - logger().debug("Starting container: {}", getDockerImageName()); + if (logger().isDebugEnabled()) logger().debug("Starting container: " + getDockerImageName()); AtomicInteger attempt = new AtomicInteger(0); Unreliables.retryUntilSuccess( @@ -368,7 +368,7 @@ protected boolean canBeReused() { private void tryStart() { try { String dockerImageName = getDockerImageName(); - logger().debug("Starting container: {}", dockerImageName); + if (logger().isDebugEnabled()) logger().debug("Starting container: " + dockerImageName); Instant startedAt = Instant.now(); logger().info("Creating container for image: {}", dockerImageName); @@ -663,7 +663,7 @@ public void stop() { * @return a logger that references the docker image name */ protected Logger logger() { - return DockerLoggerFactory.getLogger(this.getDockerImageName()); + return DockerLoggerFactory.getLogger("tc.genericcontainer"); } /** From 02d76ab6f07c3b4b5477c891268bb6d838ac7cd1 Mon Sep 17 00:00:00 2001 From: AI Lab VPS <277152186+BrunosGits@users.noreply.github.com> Date: Wed, 26 Aug 2026 23:17:36 -0300 Subject: [PATCH 2/2] fix: address review feedback for lazy debug logging - revert Java 21 toolchain to 17 - add isDebugEnabled guard to retry-loop debug - use braced blocks + parameterized logging in doStart - remove unnecessary guard in tryStart - fix logger name to avoid tc.tc prefix - update logger() Javadoc to shared logger - add ListAppender cleanup in testArchitectureCheck Closes #9876 --- build.gradle | 2 +- .../containers/GenericContainer.java | 28 ++++++++++-------- .../containers/GenericContainerTest.java | 29 ++++++++++--------- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/build.gradle b/build.gradle index 4008ac0ce63..f405ea2b92c 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ subprojects { java { toolchain { - languageVersion = JavaLanguageVersion.of(21) + languageVersion = JavaLanguageVersion.of(17) } } diff --git a/core/src/main/java/org/testcontainers/containers/GenericContainer.java b/core/src/main/java/org/testcontainers/containers/GenericContainer.java index 7345a1efd56..d9ed5d2a252 100644 --- a/core/src/main/java/org/testcontainers/containers/GenericContainer.java +++ b/core/src/main/java/org/testcontainers/containers/GenericContainer.java @@ -325,19 +325,23 @@ protected void doStart() { configure(); - if (logger().isDebugEnabled()) logger().debug("Starting container: " + getDockerImageName()); + if (logger().isDebugEnabled()) { + logger().debug("Starting container: {}", getDockerImageName()); + } AtomicInteger attempt = new AtomicInteger(0); Unreliables.retryUntilSuccess( startupAttempts, () -> { - logger() - .debug( - "Trying to start container: {} (attempt {}/{})", - getDockerImageName(), - attempt.incrementAndGet(), - startupAttempts - ); + if (logger().isDebugEnabled()) { + logger() + .debug( + "Trying to start container: {} (attempt {}/{})", + getDockerImageName(), + attempt.incrementAndGet(), + startupAttempts + ); + } tryStart(); return true; } @@ -368,7 +372,7 @@ protected boolean canBeReused() { private void tryStart() { try { String dockerImageName = getDockerImageName(); - if (logger().isDebugEnabled()) logger().debug("Starting container: " + dockerImageName); + logger().debug("Starting container: {}", dockerImageName); Instant startedAt = Instant.now(); logger().info("Creating container for image: {}", dockerImageName); @@ -658,12 +662,12 @@ public void stop() { } /** - * Provide a logger that references the docker image name. + * Provide the shared logger for generic container lifecycle messages. * - * @return a logger that references the docker image name + * @return the shared generic container logger */ protected Logger logger() { - return DockerLoggerFactory.getLogger("tc.genericcontainer"); + return DockerLoggerFactory.getLogger("genericcontainer"); } /** diff --git a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java index 37aac1b0af9..6a9bafab912 100644 --- a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java @@ -216,19 +216,22 @@ void testArchitectureCheck() { ListAppender listAppender = new ListAppender<>(); listAppender.start(); logger.addAppender(listAppender); - - container.start(); - - String regexMatch = "The architecture '\\S+' for image .*"; - assertThat(listAppender.list) - .describedAs( - "Received log list does not have a message matching '" + - regexMatch + - "': " + - listAppender.list.toString() - ) - .filteredOn(event -> event.getMessage().matches(regexMatch)) - .isNotEmpty(); + try { + container.start(); + + String regexMatch = "The architecture '\\S+' for image .*"; + assertThat(listAppender.list) + .describedAs( + "Received log list does not have a message matching '" + + regexMatch + + "': " + + listAppender.list.toString() + ) + .filteredOn(event -> event.getMessage().matches(regexMatch)) + .isNotEmpty(); + } finally { + logger.detachAppender(listAppender); + } } }