This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new d54295e2d8 [Bug 66184] Ensure that all root loggers have a level or parent d54295e2d8 is described below commit d54295e2d87650d654da1c2f9800104c39bbbfb6 Author: Piotr P. Karwasz <piotr.ra...@karwasz.org> AuthorDate: Thu Jul 28 21:04:22 2022 +0200 [Bug 66184] Ensure that all root loggers have a level or parent Since Java 8 the default level of a root logger is no longer set in the constructor. This PR sets the level to INFO (LogManager's default) if it is absent. --- java/org/apache/juli/ClassLoaderLogManager.java | 4 ++ .../org/apache/juli/TestClassLoaderLogManager.java | 61 ++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/java/org/apache/juli/ClassLoaderLogManager.java b/java/org/apache/juli/ClassLoaderLogManager.java index fc5106795e..b4ab262601 100644 --- a/java/org/apache/juli/ClassLoaderLogManager.java +++ b/java/org/apache/juli/ClassLoaderLogManager.java @@ -512,6 +512,10 @@ public class ClassLoaderLogManager extends LogManager { if (is != null) { readConfiguration(is, classLoader); } + + if (localRootLogger.getParent() == null && localRootLogger.getLevel() == null) { + localRootLogger.setLevel(Level.INFO); + } try { // Use a ThreadLocal to work around // https://bugs.openjdk.java.net/browse/JDK-8195096 diff --git a/test/org/apache/juli/TestClassLoaderLogManager.java b/test/org/apache/juli/TestClassLoaderLogManager.java index 641a52b936..524a4b86f4 100644 --- a/test/org/apache/juli/TestClassLoaderLogManager.java +++ b/test/org/apache/juli/TestClassLoaderLogManager.java @@ -16,9 +16,17 @@ */ package org.apache.juli; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.io.ByteArrayInputStream; import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.Collections; import java.util.Random; +import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -30,6 +38,8 @@ import org.junit.Test; */ public class TestClassLoaderLogManager { + private static final byte[] EMPTY_BYTES = {}; + @Test public void testReplace() { ClassLoaderLogManager logManager = new ClassLoaderLogManager(); @@ -81,6 +91,26 @@ public class TestClassLoaderLogManager { listThread.setRunning(false); } + /** + * Tests if a per-app root logger has a not {@code null} level. + */ + @Test + public void testBug66184() throws IOException { + final ClassLoader cl = new TestClassLoader(); + final ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader(cl); + final ClassLoaderLogManager logManager = new ClassLoaderLogManager(); + logManager.readConfiguration(); + final Logger rootLogger = logManager.getLogger(""); + assertNotNull("root logger is null", rootLogger); + assertNull("root logger has a parent", rootLogger.getParent()); + assertEquals(Level.INFO, rootLogger.getLevel()); + } finally { + Thread.currentThread().setContextClassLoader(oldCL); + } + } + private static class LoggerCreateThread extends Thread { private final LogManager logManager; @@ -133,4 +163,35 @@ public class TestClassLoaderLogManager { this.running = running; } } + + private static class TestClassLoader extends ClassLoader implements WebappProperties { + + @Override + public String getWebappName() { + return "webapp"; + } + + @Override + public String getHostName() { + return "localhost"; + } + + @Override + public String getServiceName() { + return "Catalina"; + } + + @Override + public boolean hasLoggingConfig() { + return true; + } + + @Override + public InputStream getResourceAsStream(final String resource) { + if ("logging.properties".equals(resource)) { + return new ByteArrayInputStream(EMPTY_BYTES); + } + return null; + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org