diff --git a/sentry-jul/src/main/java/io/sentry/jul/SentryHandler.java b/sentry-jul/src/main/java/io/sentry/jul/SentryHandler.java index c606bdf88b..bb1cce0444 100644 --- a/sentry-jul/src/main/java/io/sentry/jul/SentryHandler.java +++ b/sentry-jul/src/main/java/io/sentry/jul/SentryHandler.java @@ -150,10 +150,15 @@ protected void captureLog(@NotNull LogRecord loggingEvent) { final @Nullable Object[] arguments = loggingEvent.getParameters(); final @NotNull SentryAttributes attributes = SentryAttributes.of(); - @NotNull String message = loggingEvent.getMessage(); + final @Nullable String messageTemplate = loggingEvent.getMessage(); + if (messageTemplate == null) { + return; + } + + @NotNull String message = messageTemplate; if (loggingEvent.getResourceBundle() != null - && loggingEvent.getResourceBundle().containsKey(loggingEvent.getMessage())) { - message = loggingEvent.getResourceBundle().getString(loggingEvent.getMessage()); + && loggingEvent.getResourceBundle().containsKey(messageTemplate)) { + message = loggingEvent.getResourceBundle().getString(messageTemplate); } final @NotNull String formattedMessage = maybeFormatted(arguments, message); diff --git a/sentry-jul/src/test/kotlin/io/sentry/jul/SentryHandlerTest.kt b/sentry-jul/src/test/kotlin/io/sentry/jul/SentryHandlerTest.kt index 2cd10a81cd..29dbaeb368 100644 --- a/sentry-jul/src/test/kotlin/io/sentry/jul/SentryHandlerTest.kt +++ b/sentry-jul/src/test/kotlin/io/sentry/jul/SentryHandlerTest.kt @@ -485,6 +485,31 @@ class SentryHandlerTest { verify(fixture.transport, never()).send(checkLogs {}) } + @Test + fun `captures null message as event and breadcrumb when logs are enabled`() { + fixture = + Fixture( + minimumBreadcrumbLevel = Level.INFO, + minimumEventLevel = Level.SEVERE, + enableLogs = true, + ) + + fixture.logger.info(null as String?) + fixture.logger.severe(null as String?) + Sentry.flush(10) + + verify(fixture.transport) + .send( + checkEvent { event -> + assertNull(event.message?.message) + assertEquals(1, event.breadcrumbs?.size) + assertNull(event.breadcrumbs?.single()?.message) + }, + anyOrNull(), + ) + verify(fixture.transport, never()).send(checkLogs {}) + } + @Test fun `converts finest log level to Sentry log level`() { fixture = Fixture(minimumLevel = Level.FINEST)