This is an automated email from the ASF dual-hosted git repository. dsmiley pushed a commit to branch branch_10x in repository https://gitbox.apache.org/repos/asf/solr.git
commit fe3ec974e36e4b957c4282e3bb286bacc2922503 Author: David Smiley <[email protected]> AuthorDate: Fri Feb 20 23:44:26 2026 -0500 SOLR-18107: Test fix testLogLevelHandlerOutput (#4146) --- .../solr/handler/admin/LoggingHandlerTest.java | 44 +++++++++++++--------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/handler/admin/LoggingHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/LoggingHandlerTest.java index 0726bec92b4..a4063b25f0e 100644 --- a/solr/core/src/test/org/apache/solr/handler/admin/LoggingHandlerTest.java +++ b/solr/core/src/test/org/apache/solr/handler/admin/LoggingHandlerTest.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configuration; import org.apache.solr.SolrTestCaseJ4; @@ -66,9 +67,16 @@ public class LoggingHandlerTest extends SolrTestCaseJ4 { final Configuration config = ctx.getConfiguration(); + // Create and hold strong references to loggers to prevent GC from removing them + // during test execution (Log4j2 uses weak references internally) + Logger parentLogger = LogManager.getLogger(PARENT_LOGGER_NAME); + Logger aLogger = LogManager.getLogger(A_LOGGER_NAME); + Logger bLogger = LogManager.getLogger(B_LOGGER_NAME); + Logger bxLogger = LogManager.getLogger(BX_LOGGER_NAME); + { // sanity check our setup... - // did anybody break the anotations? + // did anybody break the annotations? assertNotNull(this.getClass().getAnnotation(LogLevel.class)); final String annotationConfig = this.getClass().getAnnotation(LogLevel.class).value(); assertTrue("WTF: " + annotationConfig, annotationConfig.startsWith(PARENT_LOGGER_NAME)); @@ -88,11 +96,11 @@ public class LoggingHandlerTest extends SolrTestCaseJ4 { config.getLoggerConfig(logger)); } - // Either explicit, or inherited, effictive logger values... - for (String logger : - Arrays.asList(PARENT_LOGGER_NAME, A_LOGGER_NAME, B_LOGGER_NAME, BX_LOGGER_NAME)) { - assertEquals(Level.DEBUG, LogManager.getLogger(logger).getLevel()); - } + // Either explicit, or inherited, effective logger values... + assertEquals(Level.DEBUG, parentLogger.getLevel()); + assertEquals(Level.DEBUG, aLogger.getLevel()); + assertEquals(Level.DEBUG, bLogger.getLevel()); + assertEquals(Level.DEBUG, bxLogger.getLevel()); } SolrClient client = new EmbeddedSolrServer(h.getCore()); @@ -130,18 +138,18 @@ public class LoggingHandlerTest extends SolrTestCaseJ4 { assertLoggerLevel(updatedLoggerLevel, B_LOGGER_NAME, "TRACE", true); assertLoggerLevel(updatedLoggerLevel, BX_LOGGER_NAME, "TRACE", false); - // check directly with log4j what it's (updated) config has... + // check directly with log4j what its (updated) config has... assertEquals(Level.DEBUG, config.getLoggerConfig(PARENT_LOGGER_NAME).getExplicitLevel()); assertEquals(Level.TRACE, config.getLoggerConfig(B_LOGGER_NAME).getExplicitLevel()); assertEquals( "Unexpected config for BX ... expected B's config", config.getLoggerConfig(B_LOGGER_NAME), config.getLoggerConfig(BX_LOGGER_NAME)); - // ...and what it's effective values - assertEquals(Level.DEBUG, LogManager.getLogger(PARENT_LOGGER_NAME).getLevel()); - assertEquals(Level.DEBUG, LogManager.getLogger(A_LOGGER_NAME).getLevel()); - assertEquals(Level.TRACE, LogManager.getLogger(B_LOGGER_NAME).getLevel()); - assertEquals(Level.TRACE, LogManager.getLogger(BX_LOGGER_NAME).getLevel()); + // ...and what its effective values are + assertEquals(Level.DEBUG, parentLogger.getLevel()); + assertEquals(Level.DEBUG, aLogger.getLevel()); + assertEquals(Level.TRACE, bLogger.getLevel()); + assertEquals(Level.TRACE, bxLogger.getLevel()); } { // UNSET @@ -161,7 +169,7 @@ public class LoggingHandlerTest extends SolrTestCaseJ4 { assertLoggerLevel(removedLoggerLevel, B_LOGGER_NAME, "DEBUG", false); assertLoggerLevel(removedLoggerLevel, BX_LOGGER_NAME, "DEBUG", false); - // check directly with log4j what it's (updated) config has... + // check directly with log4j what its (updated) config has... // // NOTE: LoggingHandler must not actually "remove" the LoggerConfig for B on 'unset' // (it might have already been defined in log4j's original config for some other reason, @@ -176,11 +184,11 @@ public class LoggingHandlerTest extends SolrTestCaseJ4 { "Unexpected config for BX ... expected B's config", config.getLoggerConfig(B_LOGGER_NAME), config.getLoggerConfig(BX_LOGGER_NAME)); - // ...and what it's effective values - assertEquals(Level.DEBUG, LogManager.getLogger(PARENT_LOGGER_NAME).getLevel()); - assertEquals(Level.DEBUG, LogManager.getLogger(A_LOGGER_NAME).getLevel()); - assertEquals(Level.DEBUG, LogManager.getLogger(B_LOGGER_NAME).getLevel()); - assertEquals(Level.DEBUG, LogManager.getLogger(BX_LOGGER_NAME).getLevel()); + // ...and what its effective values are + assertEquals(Level.DEBUG, parentLogger.getLevel()); + assertEquals(Level.DEBUG, aLogger.getLevel()); + assertEquals(Level.DEBUG, bLogger.getLevel()); + assertEquals(Level.DEBUG, bxLogger.getLevel()); } }
