This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push: new 55067d1ff1 [Bug 66184] Ensure that all root loggers have a level or parent 55067d1ff1 is described below commit 55067d1ff1f37cbac297f1391c7b861ff0162c97 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 | 57 ++++++++++++++++++++++ webapps/docs/changelog.xml | 9 ++++ 3 files changed, 70 insertions(+) diff --git a/java/org/apache/juli/ClassLoaderLogManager.java b/java/org/apache/juli/ClassLoaderLogManager.java index 2243e5703e..53f99f50f1 100644 --- a/java/org/apache/juli/ClassLoaderLogManager.java +++ b/java/org/apache/juli/ClassLoaderLogManager.java @@ -536,6 +536,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..8628deac16 100644 --- a/test/org/apache/juli/TestClassLoaderLogManager.java +++ b/test/org/apache/juli/TestClassLoaderLogManager.java @@ -16,9 +16,13 @@ */ package org.apache.juli; +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 +34,8 @@ import org.junit.Test; */ public class TestClassLoaderLogManager { + private static final byte[] EMPTY_BYTES = {}; + @Test public void testReplace() { ClassLoaderLogManager logManager = new ClassLoaderLogManager(); @@ -81,6 +87,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(""); + Assert.assertNotNull("root logger is null", rootLogger); + Assert.assertNull("root logger has a parent", rootLogger.getParent()); + Assert.assertEquals(Level.INFO, rootLogger.getLevel()); + } finally { + Thread.currentThread().setContextClassLoader(oldCL); + } + } + private static class LoggerCreateThread extends Thread { private final LogManager logManager; @@ -133,4 +159,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; + } + } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 03ac1895c5..80de61c8e3 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -105,6 +105,15 @@ issues do not "pop up" wrt. others). --> <section name="Tomcat 8.5.83 (schultz)" rtext="in development"> + <subsection name="Catalina"> + <changelog> + <fix> + <bug>66184</bug>: Ensure that JULI root loggers have a default level of + <code>INFO</code>. Pull request <pr>533</pr> provided by Piotr P. + Karwasz. (markt) + </fix> + </changelog> + </subsection> <subsection name="Other"> <changelog> <fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org