diff --git a/pom.xml b/pom.xml index 8f630a2f0..605dba7c6 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,8 @@ 2.479 ${jenkins.baseline}.1 + + 2403.v256947ecb_c8a_ jenkinsci/${project.artifactId}-plugin false diff --git a/src/main/java/com/cloudbees/jenkins/support/SupportLogHandler.java b/src/main/java/com/cloudbees/jenkins/support/SupportLogHandler.java index 842b34d6e..fde60d5c4 100644 --- a/src/main/java/com/cloudbees/jenkins/support/SupportLogHandler.java +++ b/src/main/java/com/cloudbees/jenkins/support/SupportLogHandler.java @@ -234,6 +234,7 @@ private void setFile(File file) throws FileNotFoundException { parentFile.mkdirs(); } + StreamUtils.closeQuietly(null); // ensure class is loaded so close() can succeed boolean success = false; FileOutputStream fos = null; BufferedOutputStream bos = null; diff --git a/src/main/java/com/cloudbees/jenkins/support/SupportPlugin.java b/src/main/java/com/cloudbees/jenkins/support/SupportPlugin.java index 3e57d01a3..bf8256f1b 100644 --- a/src/main/java/com/cloudbees/jenkins/support/SupportPlugin.java +++ b/src/main/java/com/cloudbees/jenkins/support/SupportPlugin.java @@ -862,6 +862,15 @@ public Void call() { // avoid double installation of the handler. JNLP agents can reconnect to the controller multiple times // and each connection gets a different RemoteClassLoader, so we need to evict them by class name, // not by their identity. + closeAll(); + Runtime.getRuntime().addShutdownHook(new Thread(LogInitializer::closeAll, "close log handlers")); + LogHolder.AGENT_LOG_HANDLER.setLevel(level); + LogHolder.AGENT_LOG_HANDLER.setDirectory(new File(rootPath.getRemote(), SUPPORT_DIRECTORY_NAME), "all"); + ROOT_LOGGER.addHandler(LogHolder.AGENT_LOG_HANDLER); + return null; + } + + private static void closeAll() { for (Handler h : ROOT_LOGGER.getHandlers()) { if (h.getClass() .getName() @@ -874,10 +883,6 @@ public Void call() { } } } - LogHolder.AGENT_LOG_HANDLER.setLevel(level); - LogHolder.AGENT_LOG_HANDLER.setDirectory(new File(rootPath.getRemote(), SUPPORT_DIRECTORY_NAME), "all"); - ROOT_LOGGER.addHandler(LogHolder.AGENT_LOG_HANDLER); - return null; } } diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java index e330cc6cc..8f6afc190 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java @@ -49,6 +49,7 @@ public void cleanUp() throws Exception { } assertEquals(cacheDir.list().length, 2); + agent2.toComputer().disconnect(null).get(); j.getInstance().removeNode(agent2); generateBundle();