diff --git a/sentry-log4j2/src/main/java/io/sentry/log4j2/SentryAppender.java b/sentry-log4j2/src/main/java/io/sentry/log4j2/SentryAppender.java index c1b53833e6d..be5a929efd2 100644 --- a/sentry-log4j2/src/main/java/io/sentry/log4j2/SentryAppender.java +++ b/sentry-log4j2/src/main/java/io/sentry/log4j2/SentryAppender.java @@ -155,6 +155,10 @@ public void append(final @NotNull LogEvent eventObject) { event.setExtra("thread_name", loggingEvent.getThreadName()); } + if (loggingEvent.getMarker() != null) { + event.setExtra("marker", loggingEvent.getMarker().toString()); + } + final Map contextData = CollectionUtils.filterMapEntries( loggingEvent.getContextData().toMap(), entry -> entry.getValue() != null); diff --git a/sentry-log4j2/src/test/kotlin/io/sentry/log4j2/SentryAppenderTest.kt b/sentry-log4j2/src/test/kotlin/io/sentry/log4j2/SentryAppenderTest.kt index 41f6ab85654..4cff11e4977 100644 --- a/sentry-log4j2/src/test/kotlin/io/sentry/log4j2/SentryAppenderTest.kt +++ b/sentry-log4j2/src/test/kotlin/io/sentry/log4j2/SentryAppenderTest.kt @@ -24,6 +24,7 @@ import kotlin.test.assertNull import kotlin.test.assertTrue import org.apache.logging.log4j.Level import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.MarkerManager import org.apache.logging.log4j.ThreadContext import org.apache.logging.log4j.core.LoggerContext import org.apache.logging.log4j.core.config.AppenderRef @@ -274,6 +275,23 @@ class SentryAppenderTest { } } + @Test + fun `attaches marker information`() { + val logger = fixture.getSut(minimumEventLevel = Level.WARN) + val sqlMarker = MarkerManager.getMarker("SQL").setParents( + MarkerManager.getMarker("SQL_QUERY"), + MarkerManager.getMarker("SQL_UPDATE") + ) + + logger.warn(sqlMarker, "testing marker tags") + + await.untilAsserted { + verify(fixture.transport).send(checkEvent { event -> + assertEquals("SQL[ SQL_QUERY, SQL_UPDATE ]", event.getExtra("marker")) + }, anyOrNull()) + } + } + @Test fun `sets SDK version`() { val logger = fixture.getSut(minimumEventLevel = Level.INFO) diff --git a/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java b/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java index d89643ba0d3..cdfb853aa76 100644 --- a/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java +++ b/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java @@ -91,6 +91,10 @@ protected void append(@NotNull ILoggingEvent eventObject) { event.setExtra("thread_name", loggingEvent.getThreadName()); } + if (loggingEvent.getMarker() != null) { + event.setExtra("marker", loggingEvent.getMarker().toString()); + } + // remove keys with null values, there is no sense to send these keys to Sentry final Map mdcProperties = CollectionUtils.filterMapEntries( diff --git a/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt b/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt index 832a1f1392a..4c9028f2b91 100644 --- a/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt +++ b/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt @@ -28,6 +28,7 @@ import kotlin.test.assertTrue import org.awaitility.kotlin.await import org.slf4j.Logger import org.slf4j.LoggerFactory +import org.slf4j.MarkerFactory import org.slf4j.MDC class SentryAppenderTest { @@ -251,6 +252,22 @@ class SentryAppenderTest { } } + @Test + fun `attaches marker information`() { + fixture = Fixture(minimumEventLevel = Level.WARN) + val sqlMarker = MarkerFactory.getDetachedMarker("SQL") + sqlMarker.add(MarkerFactory.getDetachedMarker("SQL_UPDATE")) + sqlMarker.add(MarkerFactory.getDetachedMarker("SQL_QUERY")) + + fixture.logger.warn(sqlMarker, "testing marker tags") + + await.untilAsserted { + verify(fixture.transport).send(checkEvent { event -> + assertEquals("SQL [ SQL_UPDATE, SQL_QUERY ]", event.getExtra("marker")) + }, anyOrNull()) + } + } + @Test fun `sets SDK version`() { fixture = Fixture(minimumEventLevel = Level.INFO)