Releases: getsentry/sentry-java
7.21.0
Fixes
- Do not instrument File I/O operations if tracing is disabled (#4051)
- Do not instrument User Interaction multiple times (#4051)
- Speed up view traversal to find touched target in
UserInteractionIntegration(#4051) - Reduce IPC/Binder calls performed by the SDK (#4058)
Behavioural Changes
- (added in 7.20.1) The user ip-address is now only set to
"{{auto}}"if sendDefaultPii is enabled (#4071) - Reduce the number of broadcasts the SDK is subscribed for (#4052)
- Drop
TempSensorBreadcrumbsIntegration - Drop
PhoneStateBreadcrumbsIntegration - Reduce number of broadcasts in
SystemEventsBreadcrumbsIntegration
- Drop
Current list of the broadcast events can be found here. If you'd like to subscribe for more events, consider overriding the SystemEventsBreadcrumbsIntegration as follows:
SentryAndroid.init(context) { options ->
options.integrations.removeAll { it is SystemEventsBreadcrumbsIntegration }
options.integrations.add(SystemEventsBreadcrumbsIntegration(context, SystemEventsBreadcrumbsIntegration.getDefaultActions() + listOf(/* your custom actions */)))
}If you would like to keep some of the default broadcast events as breadcrumbs, consider opening a GitHub issue.
8.0.0
Version 8 of the Sentry Android/Java SDK brings a variety of features and fixes. The most notable changes are:
Hubhas been replaced byScopes- New
Scopetypes have been introduced, see "Behavioural Changes" for more details. - Lifecycle tokens have been introduced to manage
Scopelifecycle, see "Behavioural Changes" for more details. - Bumping
minSdklevel to 21 (Android 5.0) - Our
sentry-opentelemetry-agenthas been improved and now works in combination with the rest of Sentry. You may now combine OpenTelemetry and Sentry for instrumenting your application.- You may now use both OpenTelemetry SDK and Sentry SDK to capture transactions and spans. They can also be mixed and end up on the same transaction.
- OpenTelemetry extends the Sentry SDK by adding spans for numerous integrations, like Ktor, Vert.x and MongoDB. Please check the OpenTelemetry GitHub repository for a full list.
- OpenTelemetry allows propagating trace information from and to additional libraries, that Sentry did not support before, for example gRPC.
- OpenTelemetry also has broader support for propagating the Sentry
Scopes(used to beHub) through reactive libraries like RxJava.
- The SDK is now compatible with Spring Boot 3.4
- We now support GraphQL v22 (
sentry-graphql-22) - Metrics have been removed
Please take a look at our migration guide in docs.
Sentry Self-hosted Compatibility
This SDK version is compatible with a self-hosted version of Sentry 22.12.0 or higher. If you are using an older version of self-hosted Sentry (aka onpremise), you will need to upgrade. If you're using sentry.io no action is required.
Breaking Changes
- The Android minSdk level for all Android modules is now 21 (#3852)
- The minSdk level for sentry-android-ndk changed from 19 to 21 (#3851)
- Throw IllegalArgumentException when calling Sentry.init on Android (#3596)
- Metrics have been removed from the SDK (#3774)
- Metrics will return but we don't know in what exact form yet
enableTracingoption (a.k.aenable-tracing) has been removed from the SDK (#3776)- Please set
tracesSampleRateto a value >= 0.0 for enabling performance instead. The default value isnullwhich means performance is disabled.
- Please set
- Replace
synchronizedmethods and blocks withReentrantLock(AutoClosableReentrantLock) (#3715)- If you are subclassing any Sentry classes, please check if the parent class used
synchronizedbefore. Please make sure to use the same lock object as the parent class in that case.
- If you are subclassing any Sentry classes, please check if the parent class used
traceOriginsoption (io.sentry.traces.tracing-originsin manifest) has been removed, please usetracePropagationTargets(io.sentry.traces.trace-propagation-targetsin manifest`) instead (#3780)profilingEnabledoption (io.sentry.traces.profiling.enablein manifest) has been removed, please useprofilesSampleRate(io.sentry.traces.profiling.sample-rateinstead) instead (#3780)shutdownTimeoutoption has been removed, please useshutdownTimeoutMillisinstead (#3780)profilingTracesIntervalMillisoption for Android has been removed (#3780)io.sentry.session-tracking.enablemanifest option has been removed (#3780)Sentry.traceHeaders()method has been removed, please useSentry.getTraceparent()instead (#3718)Sentry.reportFullDisplayed()method has been removed, please useSentry.reportFullyDisplayed()instead (#3717)User.otherhas been removed, please usedatainstead (#3780)SdkVersion.getIntegrations()has been removed, please usegetIntegrationSetinstead (#3780)SdkVersion.getPackages()has been removed, please usegetPackageSet()instead (#3780)Device.languagehas been removed, please uselocaleinstead (#3780)TraceContext.userandTraceContextUserclass have been removed, please useuserIdonTraceContextinstead (#3780)TransactionContext.fromSentryTrace()has been removed, please useSentry.continueTrace()instead (#3780)SentryDataFetcherExceptionHandlerhas been removed, please useSentryGenericDataFetcherExceptionHandlerin combination withSentryInstrumentationinstead (#3780)sentry-android-okhttphas been removed in favor ofsentry-okhttp, removing android dependency from the module (#3510)Contextsno longer extendsConcurrentHashMap, instead we offer a selected set of methods.- User segment has been removed (#3512)
- One of the
AndroidTransactionProfilerconstructors has been removed, please use a different one (#3780) - Use String instead of UUID for SessionId (#3834)
- The
Sessionconstructor now takes aStringinstead of aUUIDfor thesessionIdparameter. Session.getSessionId()now returns aStringinstead of aUUID.
- The
- All status codes below 400 are now mapped to
SpanStatus.OK(#3869) - Change OkHttp sub-spans to span attributes (#3556)
- This will reduce the number of spans created by the SDK
instrumenteroption should no longer be needed as our new OpenTelemetry integration now works in combination with the rest of Sentry
Behavioural Changes
- We're introducing some new
Scopetypes in the SDK, allowing for better control over what data is attached where. Previously there was a stack of scopes that was pushed and popped. Instead we now fork scopes for a given lifecycle and then restore the previous scopes. SinceHubis gone, it is also never cloned anymore. Separation of data now happens through the different scope types while making it easier to manipulate exactly what you need without having to attach data at the right time to have it apply where wanted.- Global scope is attached to all events created by the SDK. It can also be modified before
Sentry.inithas been called. It can be manipulated usingSentry.configureScope(ScopeType.GLOBAL, (scope) -> { ... }). - Isolation scope can be used e.g. to attach data to all events that come up while handling an incoming request. It can also be used for other isolation purposes. It can be manipulated using
Sentry.configureScope(ScopeType.ISOLATION, (scope) -> { ... }). The SDK automatically forks isolation scope in certain cases like incoming requests, CRON jobs, Spring@Asyncand more. - Current scope is forked often and data added to it is only added to events that are created while this scope is active. Data is also passed on to newly forked child scopes but not to parents. It can be manipulated using
Sentry.configureScope(ScopeType.CURRENT, (scope) -> { ... }).
- Global scope is attached to all events created by the SDK. It can also be modified before
Sentry.popScopehas been deprecated, please call.close()on the token returned bySentry.pushScopeinstead or use it in a way described in more detail in our migration guide.- We have chosen a default scope that is used for
Sentry.configureScope()as well as API likeSentry.setTag()- For Android the type defaults to
CURRENTscope - For Backend and other JVM applicatons it defaults to
ISOLATIONscope
- For Android the type defaults to
- Event processors on
Scopecan now be ordered by overriding thegetOrdermethod on implementations ofEventProcessor. NOTE: This order only applies to event processors onScopebut notSentryOptionsat the moment. Feel free to request this if you need it. Hubis deprecated in favor ofScopes, alongside someHubrelevant APIs. More details can be found in our migration guide.- Send file name and path only if
isSendDefaultPiiistrue(#3919) - (Android) Enable Performance V2 by default (#3824)
- With this change cold app start spans will include spans for ContentProviders, Application and Activity load.
- (Android) Replace thread id with kernel thread id in span data (#3706)
- (Android) The JNI layer for sentry-native has now been moved from sentry-java to sentry-native (#3189)
- This now includes prefab support for sentry-native, allowing you to link and access the sentry-native API within your native app code
- Chec...
7.21.0-beta.1
Fixes
- Do not instrument File I/O operations if tracing is disabled (#4051)
- Do not instrument User Interaction multiple times (#4051)
- Speed up view traversal to find touched target in
UserInteractionIntegration(#4051) - Reduce IPC/Binder calls performed by the SDK (#4058)
Behavioural Changes
- Reduce the number of broadcasts the SDK is subscribed for (#4052)
- Drop
TempSensorBreadcrumbsIntegration - Drop
PhoneStateBreadcrumbsIntegration - Reduce number of broadcasts in
SystemEventsBreadcrumbsIntegration
- Drop
Current list of the broadcast events can be found here. If you'd like to subscribe for more events, consider overriding the SystemEventsBreadcrumbsIntegration as follows:
SentryAndroid.init(context) { options ->
options.integrations.removeAll { it is SystemEventsBreadcrumbsIntegration }
options.integrations.add(SystemEventsBreadcrumbsIntegration(context, SystemEventsBreadcrumbsIntegration.getDefaultActions() + listOf(/* your custom actions */)))
}If you would like to keep some of the default broadcast events as breadcrumbs, consider opening a GitHub issue.
7.20.1 (Stable)
Behavioural Changes
- The user ip-address is now only set to
"{{auto}}"if sendDefaultPii is enabled (#4071)- This change gives you control over IP address collection directly on the client
8.0.0-rc.4
7.20.0 (Stable)
Features
- Session Replay GA (#4017)
To enable Replay use the sessionReplay.sessionSampleRate or sessionReplay.onErrorSampleRate options.
import io.sentry.SentryReplayOptions
import io.sentry.android.core.SentryAndroid
SentryAndroid.init(context) { options ->
options.sessionReplay.sessionSampleRate = 1.0
options.sessionReplay.onErrorSampleRate = 1.0
// To change default redaction behavior (defaults to true)
options.sessionReplay.redactAllImages = true
options.sessionReplay.redactAllText = true
// To change quality of the recording (defaults to MEDIUM)
options.sessionReplay.quality = SentryReplayOptions.SentryReplayQuality.MEDIUM // (LOW|MEDIUM|HIGH)
}To learn more about Session Replay, visit the documentation page: https://docs.sentry.io/platforms/android/session-replay/
Fixes
- Fix warm start detection (#3937)
- Session Replay: Reduce memory allocations, disk space consumption, and payload size (#4016)
- Session Replay: Do not try to encode corrupted frames multiple times (#4016)
Internal
- Session Replay: Allow overriding
SdkVersionfor replay events (#4014) - Session Replay: Send replay options as tags (#4015)
Breaking changes
- Session Replay options were moved from under
experimentalto the mainoptionsobject (#4017)
7.19.1
8.0.0-rc.3
Features
- Add
sentry-opentelemetry-agentless-springmodule (#4000)- This module can be added as a dependency when using Sentry with OpenTelemetry and Spring Boot but don't want to use our Agent. It takes care of configuring OpenTelemetry for use with Sentry.
- You may want to set
OTEL_LOGS_EXPORTER=none;OTEL_METRICS_EXPORTER=none;OTEL_TRACES_EXPORTER=noneenv vars to not have the log flooded with error messages regarding OpenTelemetry features we don't use.
- Add
sentry-opentelemetry-agentlessmodule (#3961)- This module can be added as a dependency when using Sentry with OpenTelemetry but don't want to use our Agent. It takes care of configuring OpenTelemetry for use with Sentry.
- To enable the auto configuration of it, please set
-Dotel.java.global-autoconfigure.enabled=trueon thejavacommand, when starting your application. - You may also want to set
OTEL_LOGS_EXPORTER=none;OTEL_METRICS_EXPORTER=none;OTEL_TRACES_EXPORTER=noneenv vars to not have the log flooded with error messages regarding OpenTelemetry features we don't use.
OpenTelemetryUtil.applyOpenTelemetryOptionsnow takes an enum instead of a boolean for its mode- Add
openTelemetryModeoption (#3994)- It defaults to
AUTOmeaning the SDK will figure out how to best configure itself for use with OpenTelemetry - Use of OpenTelemetry can also be disabled completely by setting it to
OFF(#3995)- In this case even if OpenTelemetry is present, the Sentry SDK will not use it
- Use
AGENTwhen usingsentry-opentelemetry-agent - Use
AGENTLESSwhen usingsentry-opentelemetry-agentless - Use
AGENTLESS_SPRINGwhen usingsentry-opentelemetry-agentless-spring
- It defaults to
- Add
scopeBindingModetoSpanOptions(#4004)- This setting only affects the SDK when used with OpenTelemetry.
- Defaults to
AUTOmeaning the SDK will decide whether the span should be bound to the current scope. It will not bind transactions to scope usingAUTO, it will only bind spans where the parent span is on the current scope. ONsets the new span on the current scope.OFFdoes not set the new span on the scope.
Fixes
- Replace deprecated
SimpleInstrumentationwithSimplePerformantInstrumentationfor graphql 22 (#3974) - Cache requests for Spring using Springs
ContentCachingRequestWrapperinstead of our own Wrapper to also cache parameters (#3641)- Previously only the body was cached which could lead to problems in the FilterChain as Request parameters were not available
- We now hold a strong reference to the underlying OpenTelemetry span when it is created through Sentry API (#3997)
- This keeps it from being garbage collected too early
- Close backpressure monitor on SDK shutdown (#3998)
- Due to the backpressure monitor rescheduling a task to run every 10s, it very likely caused shutdown to wait the full
shutdownTimeoutMillis(defaulting to 2s) instead of being able to terminate immediately
- Due to the backpressure monitor rescheduling a task to run every 10s, it very likely caused shutdown to wait the full
- Improve ignored check performance (#3992)
- Checking if a span origin, a transaction or a checkIn should be ignored is now faster
7.19.0
Fixes
- Session Replay: fix various crashes and issues (#3970)
- Fix
IndexOutOfBoundsExceptionwhen tracking window changes - Fix
IllegalStateExceptionwhen adding/removing draw listener for a dead view - Fix
ConcurrentModificationExceptionwhen registering window listeners and stoppingWindowRecorder/GestureRecorder
- Fix
- Add support for setting sentry-native handler_strategy (#3671)
Dependencies
8.0.0-rc.2
Fixes
- Fix incoming defer sampling decision
sentry-traceheader (#3942)- A
sentry-traceheader that only contains trace ID and span ID but no sampled flag (-1,-0suffix) means the receiving system can make its own sampling decision - When generating
sentry-traceheader fromPropagationContextwe now copy thesampledflag. - In
TransactionContext.fromPropagationContextwhen there is no parent sampling decision, keep the decisionnullso a new sampling decision is made instead of defaulting tofalse
- A
- Defer sampling decision by setting
sampledtonullinPropagationContextwhen using OpenTelemetry in case of an incoming defer samplingsentry-traceheader. (#3945) - Build
PropagationContextfromSamplingDecisionmade bySentrySamplerinstead of parsing headers and potentially ignoring a sampling decision in case asentry-traceheader comes in with deferred sampling decision. (#3947) - Let OpenTelemetry handle extracting and injecting tracing information (#3953)
- Our integrations no longer call
.continueTraceand also do not inject tracing headers if the integration has been added toignoredSpanOrigins
- Our integrations no longer call
- Changes up to
7.18.1have been merged and are now included as well