Releases: getsentry/sentry-java
8.4.0
Fixes
- The SDK now handles
null
on many APIs instead of expecting a nonnull
value (#4245)- Certain APIs like
setTag
,setData
,setExtra
,setContext
previously caused aNullPointerException
when invoked with eithernull
key or value. - The SDK now tries to have a sane fallback when
null
is passed and no longer throwsNullPointerException
- If
null
is passed, the SDK will- do nothing if a
null
key is passed, returningnull
for non void methods - remove any previous value if the new value is set to
null
- do nothing if a
- Certain APIs like
- Add support for setting in-app-includes/in-app-excludes via AndroidManifest.xml (#4240)
- Modifications to OkHttp requests are now properly propagated to the affected span / breadcrumbs (#4238)
- Please ensure the SentryOkHttpInterceptor is added last to your OkHttpClient, as otherwise changes to the
Request
by subsequent interceptors won't be considered
- Please ensure the SentryOkHttpInterceptor is added last to your OkHttpClient, as otherwise changes to the
- Fix "class ch.qos.logback.classic.spi.ThrowableProxyVO cannot be cast to class ch.qos.logback.classic.spi.ThrowableProxy" (#4206)
- In this case we cannot report the
Throwable
to Sentry as it's not available - If you are using OpenTelemetry v1
OpenTelemetryAppender
, please consider upgrading to v2
- In this case we cannot report the
- Pass OpenTelemetry span attributes into TracesSampler callback (#4253)
SamplingContext
now has agetAttribute
method that grants access to OpenTelemetry span attributes via their String key (e.g.http.request.method
)
- Fix AbstractMethodError when using SentryTraced for Jetpack Compose (#4255)
- Assume
http.client
for spanop
if not a root span (#4257) - Avoid unnecessary copies when using
CopyOnWriteArrayList
(#4247)- This affects in particular
SentryTracer.getLatestActiveSpan
which would have previously copied all child span references. This may have causedOutOfMemoryError
on certain devices due to high frequency of calling the method.
- This affects in particular
Features
- The SDK now automatically propagates the trace-context to the native layer. This allows to connect errors on different layers of the application. (#4137)
- Capture OpenTelemetry span events (#3564)
- OpenTelemetry spans may have exceptions attached to them (
openTelemetrySpan.recordException
). We can now send those to Sentry as errors. - Set
capture-open-telemetry-events=true
insentry.properties
to enable it - Set
sentry.capture-open-telemetry-events=true
in Springsapplication.properties
to enable it - Set
sentry.captureOpenTelemetryEvents: true
in Springsapplication.yml
to enable it
- OpenTelemetry spans may have exceptions attached to them (
Behavioural Changes
- Use
java.net.URI
for parsing URLs inUrlUtils
(#4210)- This could affect grouping for issues with messages containing URLs that fall in known corner cases that were handled incorrectly previously (e.g. email in URL path)
Internal
- Also use port when checking if a request is made to Sentry DSN (#4231)
- For our OpenTelemetry integration we check if a span is for a request to Sentry
- We now also consider the port when performing this check
Dependencies
7.22.2
7.22.1
8.3.0 (Stable)
Features
- Add HTTP server request headers from OpenTelemetry span attributes to sentry
request
in payload (#4102)- You have to explicitly enable each header by adding it to the OpenTelemetry config
- Please only enable headers you actually want to send to Sentry. Some may contain sensitive data like PII, cookies, tokens etc.
- We are no longer adding request/response headers to
contexts/otel/attributes
of the event.
- The
ignoredErrors
option is now configurable via the manifest propertyio.sentry.traces.ignored-errors
(#4178) - A list of active Spring profiles is attached to payloads sent to Sentry (errors, traces, etc.) and displayed in the UI when using our Spring or Spring Boot integrations (#4147)
- This consists of an empty list when only the default profile is active
- Added
enableTraceIdGeneration
to the AndroidOptions. This allows Hybrid SDKs to "freeze" and control the trace and connect errors on different layers of the application (4188) - Move to a single NetworkCallback listener to reduce number of IPC calls on Android (#4164)
- Add GraphQL Apollo Kotlin 4 integration (#4166)
- Add support for async dispatch requests to Spring Boot 2 and 3 (#3983)
- To enable it, please set
sentry.keep-transactions-open-for-async-responses=true
inapplication.properties
orsentry.keepTransactionsOpenForAsyncResponses: true
inapplication.yml
- To enable it, please set
- Add constructor to JUL
SentryHandler
for disabling external config (#4208)
Fixes
- Filter strings that cannot be parsed as Regex no longer cause an SDK crash (#4213)
- This was the case e.g. for
ignoredErrors
,ignoredTransactions
andignoredCheckIns
- We now simply don't use such strings for Regex matching and only use them for String comparison
- This was the case e.g. for
SentryOptions.setTracePropagationTargets
is no longer marked internal (#4170)- Session Replay: Fix crash when a navigation breadcrumb does not have "to" destination (#4185)
- Session Replay: Cap video segment duration to maximum 5 minutes to prevent endless video encoding in background (#4185)
- Check
tracePropagationTargets
in OpenTelemetry propagator (#4191)- If a URL can be retrieved from OpenTelemetry span attributes, we check it against
tracePropagationTargets
before attachingsentry-trace
andbaggage
headers to outgoing requests - If no URL can be retrieved we always attach the headers
- If a URL can be retrieved from OpenTelemetry span attributes, we check it against
- Fix
ignoredErrors
,ignoredTransactions
andignoredCheckIns
being unset by external options likesentry.properties
or ENV vars (#4207)- Whenever parsing of external options was enabled (
enableExternalConfiguration
), which is the default for many integrations, the values set onSentryOptions
passed toSentry.init
would be lost - Even if the value was not set in any external configuration it would still be set to an empty list
- Whenever parsing of external options was enabled (
Behavioural Changes
- The class
io.sentry.spring.jakarta.webflux.ReactorUtils
is now deprecated, please useio.sentry.reactor.SentryReactorUtils
in the newsentry-reactor
module instead (#4155)- The new module will be exposed as an
api
dependency when usingsentry-spring-boot-jakarta
(Spring Boot 3) orsentry-spring-jakarta
(Spring 6).
Therefore, if you're using one of those modules, changing your imports will suffice.
- The new module will be exposed as an
8.2.0
Breaking Changes
- The Kotlin Language version is now set to 1.6 (#3936)
Features
- Create onCreate and onStart spans for all Activities (#4025)
- Add split apks info to the
App
context (#3193) - Expose new
withSentryObservableEffect
method overload that acceptsSentryNavigationListener
as a parameter (#4143)- This allows sharing the same
SentryNavigationListener
instance across fragments and composables to preserve the trace
- This allows sharing the same
- (Internal) Add API to filter native debug images based on stacktrace addresses (#4089)
- Propagate sampling random value (#4153)
- The random value used for sampling traces is now sent to Sentry and attached to the
baggage
header on outgoing requests
- The random value used for sampling traces is now sent to Sentry and attached to the
- Update
sampleRate
that is sent to Sentry and attached to thebaggage
header on outgoing requests (#4158)- If the SDK uses its
sampleRate
ortracesSampler
callback, it now updates thesampleRate
in Dynamic Sampling Context.
- If the SDK uses its
Fixes
- Log a warning when envelope or items are dropped due to rate limiting (#4148)
- Do not log if
OtelContextScopesStorage
cannot be found (#4127)- Previously
java.lang.ClassNotFoundException: io.sentry.opentelemetry.OtelContextScopesStorage
was shown in the log if the class could not be found. - This is just a lookup the SDK performs to configure itself. The SDK also works without OpenTelemetry.
- Previously
- Session Replay: Fix various crashes and issues (#4135)
- Fix
FileNotFoundException
when trying to read/write.ongoing_segment
file - Fix
IllegalStateException
when registeringonDrawListener
- Fix SIGABRT native crashes on Motorola devices when encoding a video
- Fix
- Mention javadoc and sources for published artifacts in Gradle
.module
metadata (#3936) - (Jetpack Compose) Modifier.sentryTag now uses Modifier.Node (#4029)
- This allows Composables that use this modifier to be skippable
Dependencies
7.22.0 (Stable)
Fixes
- Session Replay: Fix various crashes and issues (#4135)
- Fix
FileNotFoundException
when trying to read/write.ongoing_segment
file - Fix
IllegalStateException
when registeringonDrawListener
- Fix SIGABRT native crashes on Motorola devices when encoding a video
- Fix
- (Jetpack Compose) Modifier.sentryTag now uses Modifier.Node (#4029)
- This allows Composables that use this modifier to be skippable
Features
- (Internal) Add API to filter native debug images based on stacktrace addresses (#4159)
8.1.0
Features
- Add
options.ignoredErrors
to filter out errors that match a certain String or Regex (#4083)- The matching is attempted on
event.message
,event.formatted
, and{event.throwable.class.name}: {event.throwable.message}
- Can be set in
sentry.properties
, e.g.ignored-errors=Some error,Another .*
- Can be set in environment variables, e.g.
SENTRY_IGNORED_ERRORS=Some error,Another .*
- For Spring Boot, it can be set in
application.properties
, e.g.sentry.ignored-errors=Some error,Another .*
- The matching is attempted on
- Log OpenTelemetry related Sentry config (#4122)
Fixes
- Avoid logging an error when a float is passed in the manifest (#4031)
- Add
request
details to transactions created through OpenTelemetry (#4098)- We now add HTTP request method and URL where Sentry expects it to display it in Sentry UI
- Remove
java.lang.ClassNotFoundException
debug logs when searching for OpenTelemetry marker classes (#4091)- There was up to three of these, one for
io.sentry.opentelemetry.agent.AgentMarker
,io.sentry.opentelemetry.agent.AgentlessMarker
andio.sentry.opentelemetry.agent.AgentlessSpringMarker
. - These were not indicators of something being wrong but rather the SDK looking at what is available at runtime to configure itself accordingly.
- There was up to three of these, one for
- 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.
- Set mechanism
type
tosuppressed
for suppressed exceptions (#4125)- This helps to distinguish an exceptions cause from any suppressed exceptions in the Sentry UI
Dependencies
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:
Hub
has been replaced byScopes
- New
Scope
types have been introduced, see "Behavioural Changes" for more details. - Lifecycle tokens have been introduced to manage
Scope
lifecycle, see "Behavioural Changes" for more details. - Bumping
minSdk
level to 21 (Android 5.0) - Our
sentry-opentelemetry-agent
has 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
enableTracing
option (a.k.aenable-tracing
) has been removed from the SDK (#3776)- Please set
tracesSampleRate
to a value >= 0.0 for enabling performance instead. The default value isnull
which means performance is disabled.
- Please set
- Replace
synchronized
methods and blocks withReentrantLock
(AutoClosableReentrantLock
) (#3715)- If you are subclassing any Sentry classes, please check if the parent class used
synchronized
before. 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
traceOrigins
option (io.sentry.traces.tracing-origins
in manifest) has been removed, please usetracePropagationTargets
(io.sentry.traces.trace-propagation-targets
in manifest`) instead (#3780)profilingEnabled
option (io.sentry.traces.profiling.enable
in manifest) has been removed, please useprofilesSampleRate
(io.sentry.traces.profiling.sample-rate
instead) instead (#3780)shutdownTimeout
option has been removed, please useshutdownTimeoutMillis
instead (#3780)profilingTracesIntervalMillis
option for Android has been removed (#3780)io.sentry.session-tracking.enable
manifest 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.other
has been removed, please usedata
instead (#3780)SdkVersion.getIntegrations()
has been removed, please usegetIntegrationSet
instead (#3780)SdkVersion.getPackages()
has been removed, please usegetPackageSet()
instead (#3780)Device.language
has been removed, please uselocale
instead (#3780)TraceContext.user
andTraceContextUser
class have been removed, please useuserId
onTraceContext
instead (#3780)TransactionContext.fromSentryTrace()
has been removed, please useSentry.continueTrace()
instead (#3780)SentryDataFetcherExceptionHandler
has been removed, please useSentryGenericDataFetcherExceptionHandler
in combination withSentryInstrumentation
instead (#3780)sentry-android-okhttp
has been removed in favor ofsentry-okhttp
, removing android dependency from the module (#3510)Contexts
no longer extendsConcurrentHashMap
, instead we offer a selected set of methods.- User segment has been removed (#3512)
- One of the
AndroidTransactionProfiler
constructors has been removed, please use a different one (#3780) - Use String instead of UUID for SessionId (#3834)
- The
Session
constructor now takes aString
instead of aUUID
for thesessionId
parameter. Session.getSessionId()
now returns aString
instead 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
instrumenter
option 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
Scope
types 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. SinceHub
is 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.init
has 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@Async
and 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.popScope
has been deprecated, please call.close()
on the token returned bySentry.pushScope
instead 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
CURRENT
scope - For Backend and other JVM applicatons it defaults to
ISOLATION
scope
- For Android the type defaults to
- Event processors on
Scope
can now be ordered by overriding thegetOrder
method on implementations ofEventProcessor
. NOTE: This order only applies to event processors onScope
but notSentryOptions
at the moment. Feel free to request this if you need it. Hub
is deprecated in favor ofScopes
, alongside someHub
relevant APIs. More details can be found in our migration guide.- Send file name and path only if
isSendDefaultPii
istrue
(#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.