logs = this.logs.get();
+ if (logs != null) {
+ logs.add(log);
+ }
+ }
+}
diff --git a/utils/test-utils/src/main/java/datadog/trace/test/logging/TestLogbackAppender.java b/utils/test-utils/src/main/java/datadog/trace/test/logging/TestLogbackAppender.java
new file mode 100644
index 00000000000..3afbda23bae
--- /dev/null
+++ b/utils/test-utils/src/main/java/datadog/trace/test/logging/TestLogbackAppender.java
@@ -0,0 +1,39 @@
+package datadog.trace.test.logging;
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.AppenderBase;
+
+/**
+ * Logback appender that captures logs for testing.
+ *
+ * To set this up, add the following to your logback-test.xml:
+ *
+ *
{@code
+ *
+ *
+ *
+ *
+ * %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * }
+ */
+public final class TestLogbackAppender extends AppenderBase {
+
+ @Override
+ protected void append(final ILoggingEvent event) {
+ final CapturedLog log =
+ new CapturedLog(
+ event.getMarker(),
+ event.getLevel().levelStr,
+ event.getMessage(),
+ event.getArgumentArray(),
+ event.getFormattedMessage());
+ TestLogCollector.INSTANCE.addLog(log);
+ }
+}