From a66a4551d64ca6bb76b5cca52882fb3bab24f1ba Mon Sep 17 00:00:00 2001 From: Alexey Zhokhov Date: Tue, 30 Mar 2021 20:33:34 +0800 Subject: [PATCH 1/6] Fixed NPE when MDC contains null values. --- .../src/main/java/io/sentry/logback/SentryAppender.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 1dc24b96be4..b74219a38af 100644 --- a/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java +++ b/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java @@ -13,7 +13,6 @@ import io.sentry.SentryOptions; import io.sentry.protocol.Message; import io.sentry.protocol.SdkVersion; -import io.sentry.util.CollectionUtils; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -91,8 +90,10 @@ protected void append(@NotNull ILoggingEvent eventObject) { event.setExtra("thread_name", loggingEvent.getThreadName()); } - final Map mdcProperties = - CollectionUtils.shallowCopy(loggingEvent.getMDCPropertyMap()); + // remove keys with null values, there is no sense to send these keys to Sentry + final Map mdcProperties = loggingEvent.getMDCPropertyMap().entrySet().stream() + .filter(it -> it.getValue() != null) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mdcProperties.isEmpty()) { event.getContexts().put("MDC", mdcProperties); } From 5d22a4816249c99c30a27d8dd33767f60b80a00b Mon Sep 17 00:00:00 2001 From: Alexey Zhokhov Date: Tue, 30 Mar 2021 20:44:03 +0800 Subject: [PATCH 2/6] Test ignore set tags with null values from MDC. --- .../io/sentry/logback/SentryAppenderTest.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 f8ed059ceb4..8f678ec4fca 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 org.awaitility.kotlin.await import org.slf4j.Logger import org.slf4j.LoggerFactory import org.slf4j.MDC +import kotlin.test.assertNull class SentryAppenderTest { private class Fixture(dsn: String? = "http://key@localhost/proj", minimumBreadcrumbLevel: Level? = null, minimumEventLevel: Level? = null) { @@ -204,6 +205,20 @@ class SentryAppenderTest { } } + @Test + fun `ignore set tags with null values from MDC`() { + fixture = Fixture(minimumEventLevel = Level.WARN) + MDC.put("key1", null) + MDC.put("key2", null) + fixture.logger.warn("testing MDC tags") + + await.untilAsserted { + verify(fixture.transport).send(checkEvent { event -> + assertNull(event.contexts["MDC"]) + }, anyOrNull()) + } + } + @Test fun `does not create MDC context when no MDC tags are set`() { fixture = Fixture(minimumEventLevel = Level.WARN) From 27e6277892d010cdcbf2093993ceb28a4d5b7216 Mon Sep 17 00:00:00 2001 From: Alexey Zhokhov Date: Wed, 31 Mar 2021 03:48:36 +0800 Subject: [PATCH 3/6] Code format. --- .../src/main/java/io/sentry/logback/SentryAppender.java | 3 ++- .../src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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 b74219a38af..200c70cfe0a 100644 --- a/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java +++ b/sentry-logback/src/main/java/io/sentry/logback/SentryAppender.java @@ -91,7 +91,8 @@ protected void append(@NotNull ILoggingEvent eventObject) { } // remove keys with null values, there is no sense to send these keys to Sentry - final Map mdcProperties = loggingEvent.getMDCPropertyMap().entrySet().stream() + final Map mdcProperties = + loggingEvent.getMDCPropertyMap().entrySet().stream() .filter(it -> it.getValue() != null) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mdcProperties.isEmpty()) { 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 8f678ec4fca..a4baadcf951 100644 --- a/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt +++ b/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt @@ -23,12 +23,12 @@ import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertNotNull +import kotlin.test.assertNull import kotlin.test.assertTrue import org.awaitility.kotlin.await import org.slf4j.Logger import org.slf4j.LoggerFactory import org.slf4j.MDC -import kotlin.test.assertNull class SentryAppenderTest { private class Fixture(dsn: String? = "http://key@localhost/proj", minimumBreadcrumbLevel: Level? = null, minimumEventLevel: Level? = null) { From 00a561307ddc72da781ac8d50c0e8ff982ffcdaa Mon Sep 17 00:00:00 2001 From: Alexey Zhokhov Date: Wed, 31 Mar 2021 03:52:47 +0800 Subject: [PATCH 4/6] Added changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e160a01caf1..7b618784b89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ * Fix: set "java" platform to transactions #1332 * Feat: Add OkHttp client application interceptor (#1330) * Fix: Allow disabling tracing through SentryOptions (#1337) +* Fix: Fix NPE when MDC contains null values (#1364) # 4.3.0 From 33325b04f6605366752fe5b4e1f28f159eb37398 Mon Sep 17 00:00:00 2001 From: Alexey Zhokhov Date: Wed, 31 Mar 2021 19:27:35 +0800 Subject: [PATCH 5/6] Update CHANGELOG.md Co-authored-by: Manoel Aranda Neto <5731772+marandaneto@users.noreply.github.com> --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b618784b89..e160a01caf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,6 @@ * Fix: set "java" platform to transactions #1332 * Feat: Add OkHttp client application interceptor (#1330) * Fix: Allow disabling tracing through SentryOptions (#1337) -* Fix: Fix NPE when MDC contains null values (#1364) # 4.3.0 From e6214449d0035ddd308a399c087d5d62f1005ded Mon Sep 17 00:00:00 2001 From: Alexey Zhokhov Date: Wed, 31 Mar 2021 19:29:58 +0800 Subject: [PATCH 6/6] Added changelog to Unreleased scope. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e160a01caf1..382b6160c0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased * Feat: Add option to ignore exceptions by type (#1352) +* Fix: Fix NPE when MDC contains null values (#1364) # 4.4.0-alpha.1