diff --git a/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy b/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy index 63fe1efac77..22fba9e41b3 100644 --- a/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy +++ b/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy @@ -5,14 +5,19 @@ import com.datadog.iast.IastSystem import com.datadog.iast.model.Range import com.datadog.iast.taint.TaintedObject import com.datadog.iast.taint.TaintedObjects -import datadog.trace.api.gateway.* +import datadog.trace.api.gateway.CallbackProvider +import datadog.trace.api.gateway.EventType +import datadog.trace.api.gateway.Events +import datadog.trace.api.gateway.Flow +import datadog.trace.api.gateway.IGSpanInfo +import datadog.trace.api.gateway.RequestContext +import datadog.trace.api.gateway.RequestContextSlot import datadog.trace.api.iast.InstrumentationBridge import datadog.trace.bootstrap.instrumentation.api.AgentTracer -import org.slf4j.Logger -import org.slf4j.LoggerFactory - import java.util.function.BiFunction import java.util.function.Supplier +import org.slf4j.Logger +import org.slf4j.LoggerFactory trait IastRequestContextPreparationTrait { @@ -73,7 +78,9 @@ trait IastRequestContextPreparationTrait { private static Logger withLogger(final String name) { final logger = LoggerFactory.getLogger(name) - if (logger instanceof ch.qos.logback.classic.Logger) { + + // Check logger class by name to avoid NoClassDefFoundError at runtime for tests without Logback. + if (logger.class.name == "ch.qos.logback.classic.Logger") { ((ch.qos.logback.classic.Logger) logger).level = ch.qos.logback.classic.Level.DEBUG } return logger diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle index 6a0d64a5900..823193ea978 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle @@ -1,4 +1,6 @@ apply from: "$rootDir/gradle/java.gradle" +// Use slf4j-simple as default; logback has a high chance of getting stuck in a deadlock on CI. +apply from: "$rootDir/gradle/slf4j-simple.gradle" testJvmConstraints { // TODO Java 17: This version of vertx-web doesn't support Java 17 @@ -49,3 +51,4 @@ dependencies { latestDepTestImplementation group: 'io.vertx', name: 'vertx-web', version: '3.+' latestDepTestImplementation group: 'io.vertx', name: 'vertx-web-client', version: '3.+' } + diff --git a/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java b/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java index 3b86703d10c..3c221426040 100644 --- a/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java +++ b/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java @@ -30,18 +30,23 @@ class DebugLogger { private static final Logger LOGGER; static { - try { - LOGGER = LoggerFactory.getLogger("Taintable tainted objects"); - Class levelCls = Class.forName("ch.qos.logback.classic.Level"); - Method setLevel = LOGGER.getClass().getMethod("setLevel", levelCls); - Object debugLevel = levelCls.getField("DEBUG").get(null); - setLevel.invoke(LOGGER, debugLevel); - } catch (IllegalAccessException - | NoSuchFieldException - | ClassNotFoundException - | NoSuchMethodException - | InvocationTargetException e) { - throw new RuntimeException(e); + LOGGER = LoggerFactory.getLogger("Taintable tainted objects"); + + // Check logger class by name to avoid NoClassDefFoundError at runtime + // for tests without Logback. + if (LOGGER.getClass().getName().equals("ch.qos.logback.classic.Logger")) { + try { + Class levelCls = Class.forName("ch.qos.logback.classic.Level"); + Method setLevel = LOGGER.getClass().getMethod("setLevel", levelCls); + Object debugLevel = levelCls.getField("DEBUG").get(null); + setLevel.invoke(LOGGER, debugLevel); + } catch (IllegalAccessException + | NoSuchFieldException + | ClassNotFoundException + | NoSuchMethodException + | InvocationTargetException e) { + throw new RuntimeException(e); + } } }