From a1160c5287cc1934f65c344e59f549bd11cd782d Mon Sep 17 00:00:00 2001 From: labkey-tchad Date: Thu, 5 Feb 2026 11:08:32 -0800 Subject: [PATCH 1/3] Add parameter to set the logging level for TestLogger --- src/org/labkey/test/TestProperties.java | 31 ++++++++++++----------- src/org/labkey/test/WebDriverWrapper.java | 10 ++++---- src/org/labkey/test/util/TestLogger.java | 10 +++++++- test.properties.template | 6 ++++- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/org/labkey/test/TestProperties.java b/src/org/labkey/test/TestProperties.java index ee672a4c5d..77fe8b825a 100644 --- a/src/org/labkey/test/TestProperties.java +++ b/src/org/labkey/test/TestProperties.java @@ -17,11 +17,13 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.SystemUtils; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.labkey.serverapi.reader.Readers; import org.labkey.test.util.CachingSupplier; import org.labkey.test.util.CspLogUtil; import org.labkey.test.util.TestDataGenerator; -import org.labkey.test.util.TestLogger; import org.labkey.test.util.Version; import org.openqa.selenium.Dimension; @@ -42,19 +44,20 @@ import java.util.Objects; import java.util.Optional; import java.util.Properties; -import java.util.Random; import java.util.stream.Collectors; import java.util.stream.Stream; public abstract class TestProperties { + private static final Logger LOG = LogManager.getLogger(TestProperties.class); + static { final File propFile = new File(TestFileUtils.getTestRoot(), "test.properties"); final File propFileTemplate = new File(TestFileUtils.getTestRoot(), "test.properties.template"); if (!propFile.exists()) { - TestLogger.log(String.format("'%s' does not exist. Creating default from '%s'", propFile.getName(), propFileTemplate.getName())); + LOG.info("'{}' does not exist. Creating default from '{}'", propFile.getName(), propFileTemplate.getName()); try (Stream propStream = Files.lines(propFileTemplate.toPath())) { final Iterator iterator = propStream.filter(line -> !line.startsWith("#!!")).iterator(); @@ -62,12 +65,12 @@ public abstract class TestProperties } catch (IOException e) { - TestLogger.error(e.getMessage()); + LOG.error(e.getMessage(), e); } } try (Reader propReader = Readers.getReader(propFile)) { - TestLogger.log("Loading properties from " + propFile.getName()); + LOG.info("Loading properties from {}", propFile.getName()); Properties properties = new Properties(); properties.load(propReader); properties.putAll(System.getProperties()); @@ -75,8 +78,7 @@ public abstract class TestProperties } catch (IOException ioe) { - TestLogger.error("Failed to load " + propFile.getName() + " file. Running with hard-coded defaults"); - ioe.printStackTrace(System.err); + LOG.error("Failed to load {} file. Running with hard-coded defaults", propFile.getName(), ioe); } final List gradleProperties = List.of("labkeyVersion"); @@ -85,7 +87,7 @@ public abstract class TestProperties { try (Reader propReader = Readers.getReader(serverPropFile)) { - TestLogger.log("Loading properties from " + serverPropFile.getName()); + LOG.info("Loading properties from {}", serverPropFile.getName()); Properties properties = new Properties(); properties.load(propReader); for (String key : gradleProperties) @@ -98,8 +100,7 @@ public abstract class TestProperties } catch (IOException ioe) { - TestLogger.error("Failed to load " + serverPropFile.getName() + " file."); - ioe.printStackTrace(System.err); + LOG.error("Failed to load {} file.", serverPropFile.getName(), ioe); } } @@ -298,9 +299,9 @@ public static boolean isTroubleshootingStacktracesEnabled() return getBooleanProperty("webtest.troubleshooting.stacktraces", false); } - public static boolean isDebugLoggingEnabled() + public static Level getTestLogLevel() { - return getBooleanProperty("webtest.logging.debug", false); + return Level.toLevel(System.getProperty("webtest.log.level"), Level.INFO); } public static boolean isPrimaryUserAppAdmin() @@ -432,7 +433,7 @@ public static File getDumpDir() "Tried system properties failure.output.dir and java.io.tmpdir"); } - TestLogger.log("Using " + dumpDir + " to store test output"); + LOG.info("Using {} to store test output", dumpDir); } return dumpDir; } @@ -475,7 +476,7 @@ public static int getIntegerProperty(String key, int def) } catch (NumberFormatException e) { - TestLogger.warn("Invalid value for property %s: '%s'".formatted(key, prop), e); + LOG.warn("Invalid value for property {}: '{}'", key, prop, e); } } return def; @@ -499,7 +500,7 @@ public static double getDoubleProperty(String key, double def) } catch (NumberFormatException e) { - TestLogger.warn("Invalid value for property %s: '%s'".formatted(key, prop), e); + LOG.warn("Invalid value for property {}: '{}'", key, prop, e); } } return def; diff --git a/src/org/labkey/test/WebDriverWrapper.java b/src/org/labkey/test/WebDriverWrapper.java index b51b78bfc1..d251eb47f0 100644 --- a/src/org/labkey/test/WebDriverWrapper.java +++ b/src/org/labkey/test/WebDriverWrapper.java @@ -355,6 +355,7 @@ protected Pair createNewWebDriver(@NotNull Pair Date: Thu, 5 Feb 2026 11:24:25 -0800 Subject: [PATCH 2/3] Shift responsibility --- .../labkey/test/aspects/MethodLoggingAspect.java | 4 ++-- src/org/labkey/test/util/TestLogger.java | 13 ++++--------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/org/labkey/test/aspects/MethodLoggingAspect.java b/src/org/labkey/test/aspects/MethodLoggingAspect.java index 1a2c648544..b0cef6704c 100644 --- a/src/org/labkey/test/aspects/MethodLoggingAspect.java +++ b/src/org/labkey/test/aspects/MethodLoggingAspect.java @@ -72,7 +72,7 @@ public void beforeLoggedMethod(JoinPoint joinPoint, LogMethod logMethod) String argsString = getArgsString(loggedParameters); - if (logMethod.quiet()) + if (logMethod.quiet() && !TestLogger.log().isDebugEnabled()) { TestLogger.suppressLogging(true); quietMethods.add(method); @@ -108,7 +108,7 @@ private void logMethodEnd(JoinPoint joinPoint, LogMethod logMethod, String logPr String argString = " done"; - if (logMethod.quiet()) + if (logMethod.quiet() && !TestLogger.log().isDebugEnabled()) { quietMethods.pop(); argString = quietMethodsArgStrings.pop(); diff --git a/src/org/labkey/test/util/TestLogger.java b/src/org/labkey/test/util/TestLogger.java index dd0cb869c0..835f3bd375 100644 --- a/src/org/labkey/test/util/TestLogger.java +++ b/src/org/labkey/test/util/TestLogger.java @@ -22,20 +22,15 @@ import org.apache.logging.log4j.core.config.Configurator; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; -import org.labkey.test.TestProperties; import java.util.concurrent.TimeUnit; +import static org.labkey.test.TestProperties.getTestLogLevel; + public class TestLogger { - private static final Logger LOG = LogManager.getLogger(TestLogger.class); - private static final Logger NO_OP; - - static - { - Configurator.setLevel(LOG, TestProperties.getTestLogLevel()); - NO_OP = LOG.isDebugEnabled() ? LOG : LogManager.getLogger("NoOpLogger"); - } + private static final Logger LOG = Configurator.setLevel(LogManager.getLogger(TestLogger.class), getTestLogLevel()); + private static final Logger NO_OP = LogManager.getLogger("NoOpLogger"); private static final int indentStep = 2; private static final int MAX_INDENT = 20; From 148f5fb5a072c92bd2c42478e0ccb3092ee58cff Mon Sep 17 00:00:00 2001 From: labkey-tchad Date: Thu, 5 Feb 2026 15:12:26 -0800 Subject: [PATCH 3/3] Don't invalidate log4j config file --- src/org/labkey/test/TestProperties.java | 5 ++--- src/org/labkey/test/util/TestLogger.java | 9 ++++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/org/labkey/test/TestProperties.java b/src/org/labkey/test/TestProperties.java index 77fe8b825a..82ed8da3d2 100644 --- a/src/org/labkey/test/TestProperties.java +++ b/src/org/labkey/test/TestProperties.java @@ -17,7 +17,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.SystemUtils; -import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.labkey.serverapi.reader.Readers; @@ -299,9 +298,9 @@ public static boolean isTroubleshootingStacktracesEnabled() return getBooleanProperty("webtest.troubleshooting.stacktraces", false); } - public static Level getTestLogLevel() + public static String getTestLogLevel() { - return Level.toLevel(System.getProperty("webtest.log.level"), Level.INFO); + return System.getProperty("webtest.log.level"); } public static boolean isPrimaryUserAppAdmin() diff --git a/src/org/labkey/test/util/TestLogger.java b/src/org/labkey/test/util/TestLogger.java index 835f3bd375..097a7a93c0 100644 --- a/src/org/labkey/test/util/TestLogger.java +++ b/src/org/labkey/test/util/TestLogger.java @@ -16,6 +16,7 @@ package org.labkey.test.util; import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.ThreadContext; @@ -29,9 +30,15 @@ public class TestLogger { - private static final Logger LOG = Configurator.setLevel(LogManager.getLogger(TestLogger.class), getTestLogLevel()); + private static final Logger LOG = LogManager.getLogger(TestLogger.class); private static final Logger NO_OP = LogManager.getLogger("NoOpLogger"); + static + { + if (getTestLogLevel() != null) + Configurator.setLevel(LOG, Level.toLevel(getTestLogLevel())); + } + private static final int indentStep = 2; private static final int MAX_INDENT = 20;