From 4db97e0fb4581241a362d9a04f478733ab3eea6e Mon Sep 17 00:00:00 2001 From: soloturn Date: Thu, 30 Jul 2026 23:03:04 +0200 Subject: [PATCH 1/2] fix(module): log APIScanner class-not-found at info, not warn+stacktrace APIScanner.scan() iterates every module's class index during ModuleManager.setupSandbox(), which runs before modules are loaded onto forClassLoader - so most non-engine modules' API classes are expected to be unresolvable there, not an error. WARN + full stack trace on every one of these floods the log at startup. Downgrade to a one-line INFO stating which classloader was checked. Co-Authored-By: soloturn --- .../java/org/terasology/gestalt/module/sandbox/APIScanner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java b/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java index bf0bcda3..36b2ca87 100644 --- a/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java +++ b/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java @@ -78,7 +78,7 @@ public void scan(ClassIndex classIndex) { } } } catch (ClassNotFoundException e) { - logger.warn("Class not found", e); + logger.info("Class {} not found on classloader {} - expected if it belongs to a module's own classloader instead", apiClass, forClassLoader); } } } From c524e4a49993204e64dc811bfe3f36676a02ec24 Mon Sep 17 00:00:00 2001 From: soloturn Date: Thu, 6 Aug 2026 04:18:06 +0200 Subject: [PATCH 2/2] fix(module): drop assumed cause from APIScanner's not-found log message Per BenjaminAmos's review on PR #167: the "expected if it belongs to a module's own classloader instead" clause assumed a specific cause for the miss that isn't always true - forClassLoader/classIndex are caller-supplied, so a mismatch can come from other call sites too. Keep the class and classloader detail, drop the assumption. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PQriAKnoCEqcmFoSAvU39Q --- .../java/org/terasology/gestalt/module/sandbox/APIScanner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java b/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java index 36b2ca87..f5df7f6a 100644 --- a/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java +++ b/gestalt-module/src/main/java/org/terasology/gestalt/module/sandbox/APIScanner.java @@ -78,7 +78,7 @@ public void scan(ClassIndex classIndex) { } } } catch (ClassNotFoundException e) { - logger.info("Class {} not found on classloader {} - expected if it belongs to a module's own classloader instead", apiClass, forClassLoader); + logger.info("Class {} not found on classloader {}", apiClass, forClassLoader); } } }