Skip to content

Releases: getsentry/sentry-java

8.33.0

18 Feb 13:28

Choose a tag to compare

Features

  • Add installGroupsOverride parameter to Build Distribution SDK for programmatic filtering, with support for configuration via properties file using io.sentry.distribution.install-groups-override (#5066)

Fixes

  • When merging tombstones with Native SDK, use the tombstone message if the Native SDK didn't explicitly provide one. (#5095)
  • Fix thread leak caused by eager creation of SentryExecutorService in SentryOptions (#5093)
    • There were cases where we created options that ended up unused but we failed to clean those up.
  • Attach user attributes to logs and metrics regardless of sendDefaultPii (#5099)
  • No longer log a warning if a logging integration cannot initialize Sentry due to missing DSN (#5075)
    • While this may have been useful to some, it caused lots of confusion.
  • Session Replay: Add androidx.camera.view.PreviewView to default maskedViewClasses to mask camera previews by default. (#5097)

Dependencies

Internal

  • Add integration to track session replay custom masking (#5070)

8.32.0

09 Feb 10:10

Choose a tag to compare

Features

  • Add installGroupsOverride parameter and installGroups property to Build Distribution SDK (#5062)
  • Update Android targetSdk to API 36 (Android 16) (#5016)
  • Add AndroidManifest support for Spotlight configuration via io.sentry.spotlight.enable and io.sentry.spotlight.url (#5064)
  • Collect database transaction spans (BEGIN, COMMIT, ROLLBACK) (#5072)
    • To enable creation of these spans, set options.enableDatabaseTransactionTracing to true
    • enable-database-transaction-tracing=true when using sentry.properties
    • For Spring Boot, use sentry.enable-database-transaction-tracing=true in application.properties or in application.yml:
      sentry:
        enable-database-transaction-tracing: true
  • Add support for collecting native crashes using Tombstones (#4933, #5037)
    • Added Tombstone integration that detects native crashes using ApplicationExitInfo.REASON_CRASH_NATIVE on Android 12+
    • Crashes enriched with Tombstones contain more crash details and detailed thread info
    • Tombstone and NDK integrations are now automatically merged into a single crash event, eliminating duplicate reports
    • To enable it, add the integration in your Sentry initialization:
      SentryAndroid.init(context, options -> {
          options.isTombstoneEnabled = true
      })
      or in the AndroidManifest.xml using:
      <meta-data android:name="io.sentry.tombstone.enable" android:value="true" />

Fixes

  • Extract SpotlightIntegration to separate sentry-spotlight module to prevent insecure HTTP URLs from appearing in release APKs (#5064)
    • Breaking: Users who enable Spotlight must now add the io.sentry:sentry-spotlight dependency:
      dependencies {
          debugImplementation("io.sentry:sentry-spotlight:<version>")
      }
  • Fix scroll target detection for Jetpack Compose (#5017)
  • No longer fork Sentry Scopes for reactor-kafka consumer poll Runnable (#5080)
    • This was causing a memory leak because reactor-kafka's poll event reschedules itself infinitely, and each invocation of SentryScheduleHook created forked scopes with a parent reference, building an unbounded chain that couldn't be garbage collected.
  • Fix cold/warm app start type detection for Android devices running API level 34+ (#4999)

Internal

  • Establish new native exception mechanisms to differentiate events generated by sentry-native from ApplicationExitInfo. (#5052)
  • Set write permission for statuses in the changelog preview GHA workflow. (#5053)

Dependencies

8.31.0

21 Jan 13:56

Choose a tag to compare

Features

  • Added io.sentry.ndk.sdk-name Android manifest option to configure the native SDK's name (#5027)
  • Replace sentry.trace.parent_span_id attribute with spanId property on SentryLogEvent (#5040)

Fixes

  • Only attach user attributes to logs if sendDefaultPii is enabled (#5036)
  • Reject new logs if LoggerBatchProcessor is shutting down (#5041)
  • Downgrade protobuf-javalite dependency from 4.33.1 to 3.25.8 (#5044)

Dependencies

8.30.0

15 Jan 10:01

Choose a tag to compare

Fixes

  • Fix ANRs when collecting device context (#4970)
    • IMPORTANT: This disables collecting external storage size (total/free) by default, to enable it back
      use options.isCollectExternalStorageContext = true or <meta-data android:name="io.sentry.external-storage-context" android:value="true" />
  • Fix NullPointerException when reading ANR marker (#4979)
  • Report discarded log in batch processor as log_byte (#4971)

Improvements

  • Expose MAX_EVENT_SIZE_BYTES constant in SentryOptions (#4962)
  • Discard envelopes on 4xx and 5xx response (#4950)
    • This aims to not overwhelm Sentry after an outage or load shedding (including HTTP 429) where too many events are sent at once

Feature

  • Add a Tombstone integration that detects native crashes without relying on the NDK integration, but instead using ApplicationExitInfo.REASON_CRASH_NATIVE on Android 12+. (#4933)
    • Currently exposed via options as an internal API only.
    • If enabled alongside the NDK integration, crashes will be reported as two separate events. Users should enable only one; deduplication between both integrations will be added in a future release.
  • Add Sentry Metrics to Java SDK (#5026)
    • Metrics are enabled by default
    • APIs are namespaced under Sentry.metrics()
    • We offer the following APIs:
      • count: A metric that increments counts
      • gauge: A metric that tracks a value that can go up or down
      • distribution: A metric that tracks the statistical distribution of values
    • For more details, see the Metrics documentation: https://docs.sentry.io/product/explore/metrics/getting-started/

8.29.0 (Stable)

16 Dec 08:30

Choose a tag to compare

Fixes

  • Support serialization of primitive arrays (boolean[], byte[], short[], char[], int[], long[], float[], double[]) (#4968)
  • Session Replay: Improve network body parsing and truncation handling (#4958)

Internal

  • Support metric envelope item type (#4956)

8.28.0

04 Dec 14:05

Choose a tag to compare

Features

  • Android: Flush logs when app enters background (#4951)
  • Add option to capture additional OkHttp network request/response details in session replays (#4919)
    • Depends on SentryOkHttpInterceptor to intercept the request and extract request/response bodies
    • To enable, add url regexes via the io.sentry.session-replay.network-detail-allow-urls metadata tag in AndroidManifest (code sample)
      • Or you can manually specify SentryReplayOptions via SentryAndroid#init:
        (Make sure you disable the auto init via manifest meta-data: io.sentry.auto-init=false)
Kotlin
SentryAndroid.init(
    this,
    options -> {
      // options.dsn = "https://examplePublicKey@o0.ingest.sentry.io/0"
      // options.sessionReplay.sessionSampleRate = 1.0
      // options.sessionReplay.onErrorSampleRate = 1.0
      // ..

      options.sessionReplay.networkDetailAllowUrls = listOf(".*")
      options.sessionReplay.networkDetailDenyUrls = listOf(".*deny.*")
      options.sessionReplay.networkRequestHeaders = listOf("Authorization", "X-Custom-Header", "X-Test-Request")
      options.sessionReplay.networkResponseHeaders = listOf("X-Response-Time", "X-Cache-Status", "X-Test-Response")
    });
Java
SentryAndroid.init(
    this,
    options -> {
        options.getSessionReplay().setNetworkDetailAllowUrls(Arrays.asList(".*"));
        options.getSessionReplay().setNetworkDetailDenyUrls(Arrays.asList(".*deny.*"));
        options.getSessionReplay().setNetworkRequestHeaders(
            Arrays.asList("Authorization", "X-Custom-Header", "X-Test-Request"));
        options.getSessionReplay().setNetworkResponseHeaders(
            Arrays.asList("X-Response-Time", "X-Cache-Status", "X-Test-Response"));
    });

Improvements

  • Avoid forking rootScopes for Reactor if current thread has NoOpScopes (#4793)
    • This reduces the SDKs overhead by avoiding unnecessary scope forks

Fixes

  • Fix missing thread stacks for ANRv1 events (#4918)
  • Fix handling of unparseable mime-type on request filter (#4939)

Internal

  • Support span envelope item type (#4935)

Dependencies

8.27.1

24 Nov 13:32

Choose a tag to compare

Fixes

  • Do not log if sentry.properties in rundir has not been found (#4929)

8.27.0

21 Nov 12:36

Choose a tag to compare

Features

  • Implement OpenFeature Integration that tracks Feature Flag evaluations (#4910)
    • To make use of it, add the sentry-openfeature dependency and register the the hook using: openFeatureApiInstance.addHooks(new SentryOpenFeatureHook());
  • Implement LaunchDarkly Integrations that track Feature Flag evaluations (#4917)
    • For Android, please add sentry-launchdarkly-android as a dependency and register the SentryLaunchDarklyAndroidHook
    • For Server / JVM, please add sentry-launchdarkly-server as a dependency and register the SentryLaunchDarklyServerHook
  • Detect oversized events and reduce their size (#4903)
    • You can opt into this new behaviour by setting enableEventSizeLimiting to true (sentry.enable-event-size-limiting=true for Spring Boot application.properties)
    • You may optionally register an onOversizedEvent callback to implement custom logic that is executed in case an oversized event is detected
      • This is executed first and if event size was reduced sufficiently, no further truncation is performed
    • In case we detect an oversized event, we first drop breadcrumbs and if that isn't sufficient we also drop stack frames in order to get an events size down

Improvements

  • Do not send manual log origin (#4897)

Dependencies

  • Bump Spring Boot 4 to GA (#4923)

8.26.0

12 Nov 06:42

Choose a tag to compare

Features

  • Add feature flags API (#4812) and (#4831)
    • You may now keep track of your feature flag evaluations and have them show up in Sentry.
    • Top level API (Sentry.addFeatureFlag("my-feature-flag", true);) writes to scopes and the current span (if there is one)
    • It is also possible to use API on IScope, IScopes, ISpan and ITransaction directly
    • Feature flag evaluations tracked on scope(s) will be added to any errors reported to Sentry.
      • The SDK keeps the latest 100 evaluations from scope(s), replacing old entries as new evaluations are added.
    • For feature flag evaluations tracked on spans:
      • Only 10 evaluations are tracked per span, existing flags are updated but new ones exceeding the limit are ignored
      • Spans do not inherit evaluations from their parent
  • Drop log events once buffer hits hard limit (#4889)
    • If we have 1000 log events queued up, we drop any new logs coming in to prevent OOM
  • Remove vendored code and upgrade to async profiler 4.2 (#4856)
    • This adds support for JDK 23+

Fixes

  • Removed SentryExecutorService limit for delayed scheduled tasks (#4846)
  • Fix visual artifacts for the Canvas strategy on some devices (#4861)
  • [Config] Trim whitespace on properties path (#4880)
  • Only set DefaultReplayBreadcrumbConverter if replay is available (#4888)
  • Session Replay: Cache connection status instead of using blocking calls (#4891)
  • Fix log count in client reports (#4869)
  • Fix profilerId propagation (#4833)
  • Fix profiling init for Spring and Spring Boot w Agent auto-init (#4815)
  • Copy active span on scope clone (#4878)

Improvements

  • Fallback to distinct-id as user.id logging attribute when user is not set (#4847)
  • Report Timber.tag() as timber.tag log attribute (#4845)
  • Session Replay: Add screenshot strategy serialization to RRWeb events (#4851)
  • Report discarded log bytes (#4871)
  • Log why a properties file was not loaded (#4879)

Dependencies

8.25.0 (stable)

29 Oct 15:59

Choose a tag to compare

Fixes

  • [ANR] Removed AndroidTransactionProfiler lock (#4817)
  • Avoid ExecutorService for DefaultCompositePerformanceCollector timeout (#4841)
    • This avoids infinite data collection for never stopped transactions, leading to OOMs
  • Fix wrong .super() call in SentryTimberTree (#4844)

Improvements

  • [ANR] Defer some class availability checks (#4825)
  • Collect PerformanceCollectionData only for sampled transactions (#4834)
    • Breaking change: Transactions with a deferred sampling decision (sampled == null) won't be collecting any performance data anymore (CPU, RAM, slow/frozen frames).

Dependencies