@@ -16,7 +16,9 @@ import io.sentry.transport.ITransport
1616import java.time.Instant
1717import java.time.LocalDateTime
1818import java.time.ZoneId
19+ import java.util.ListResourceBundle
1920import java.util.logging.Level
21+ import java.util.logging.LogRecord
2022import java.util.logging.Logger
2123import kotlin.test.AfterTest
2224import kotlin.test.BeforeTest
@@ -510,6 +512,40 @@ class SentryHandlerTest {
510512 verify(fixture.transport, never()).send(checkLogs {})
511513 }
512514
515+ @Test
516+ fun `captures null message as event and breadcrumb when resource bundle is set` () {
517+ fixture =
518+ Fixture (
519+ minimumBreadcrumbLevel = Level .INFO ,
520+ minimumEventLevel = Level .SEVERE ,
521+ enableLogs = true ,
522+ )
523+ val resourceBundle =
524+ object : ListResourceBundle () {
525+ override fun getContents (): Array <Array <Any >> =
526+ arrayOf(arrayOf<Any >(" message" , " localized message" ))
527+ }
528+
529+ fixture.handler.publish(
530+ LogRecord (Level .INFO , null ).apply { this .resourceBundle = resourceBundle }
531+ )
532+ fixture.handler.publish(
533+ LogRecord (Level .SEVERE , null ).apply { this .resourceBundle = resourceBundle }
534+ )
535+ Sentry .flush(10 )
536+
537+ verify(fixture.transport)
538+ .send(
539+ checkEvent { event ->
540+ assertNull(event.message?.message)
541+ assertEquals(1 , event.breadcrumbs?.size)
542+ assertNull(event.breadcrumbs?.single()?.message)
543+ },
544+ anyOrNull(),
545+ )
546+ verify(fixture.transport, never()).send(checkLogs {})
547+ }
548+
513549 @Test
514550 fun `converts finest log level to Sentry log level` () {
515551 fixture = Fixture (minimumLevel = Level .FINEST )
0 commit comments