Releases: getsentry/sentry-java
7.14.0 (Stable)
Features
- Session Replay: Gesture/touch support for Flutter (#3623)
Fixes
- Fix app start spans missing from Pixel devices (#3634)
- Avoid ArrayIndexOutOfBoundsException on Android cpu data collection (#3598)
- Fix lazy select queries instrumentation (#3604)
- Session Replay: buffer mode improvements (#3622)
- Align next segment timestamp with the end of the buffered segment when converting from buffer mode to session mode
- Persist
buffer
replay type for the entire replay when converting from buffer mode to session mode - Properly store screen names for
buffer
mode
- Session Replay: fix various crashes and issues (#3628)
- Fix video not being encoded on Pixel devices
- Fix SIGABRT native crashes on Xiaomi devices when encoding a video
- Fix
RejectedExecutionException
when redacting a screenshot - Fix
FileNotFoundException
when persisting segment values
Chores
- Introduce
ReplayShadowMediaCodec
and refactor tests using custom encoder (#3612)
7.13.0
Features
- Session Replay: (#3565) (#3609)
- Capture remaining replay segment for ANRs on next app launch
- Capture remaining replay segment for unhandled crashes on next app launch
Fixes
- Session Replay: (#3565) (#3609)
- Fix stopping replay in
session
mode at 1 hour deadline - Never encode full frames for a video segment, only do partial updates. This further reduces size of the replay segment
- Use propagation context when no active transaction for ANRs
- Fix stopping replay in
Dependencies
- Bump Spring Boot to 3.3.2 (#3541)
7.12.1
7.12.0
Features
-
Session Replay Public Beta (#3339)
To enable Replay use the
sessionReplay.sessionSampleRate
orsessionReplay.errorSampleRate
experimental options.import io.sentry.SentryReplayOptions import io.sentry.android.core.SentryAndroid SentryAndroid.init(context) { options -> // Currently under experimental options: options.experimental.sessionReplay.sessionSampleRate = 1.0 // We suggest 0.1 in production (10% sessions sampled) options.experimental.sessionReplay.errorSampleRate = 1.0 // To change default redaction behavior (defaults to true) options.experimental.sessionReplay.redactAllImages = true options.experimental.sessionReplay.redactAllText = true // To change quality of the recording (defaults to MEDIUM) options.experimental.sessionReplay.quality = SentryReplayOptions.SentryReplayQuality.MEDIUM // (LOW|MEDIUM|HIGH) }
To learn more visit Sentry's Mobile Session Replay documentation page.
7.12.0-alpha.4
8.0.0-alpha.4
Fixes
- Removed user segment (#3512)
- Use span id of remote parent (#3548)
- Traces were broken because on an incoming request, OtelSentrySpanProcessor did not set the parentSpanId on the span correctly. Traces were not referencing the actual parent span but some other (random) span ID which the server doesn't know.
- Attach active span to scope when using OpenTelemetry (#3549)
- Errors weren't linked to traces correctly due to parts of the SDK not knowing the current span
- Record dropped spans in client report when sampling out OpenTelemetry spans (#3552)
- Retrieve the correct current span from
Scope
/Scopes
when using OpenTelemetry (#3554)
8.0.0-alpha.3
Breaking Changes
sentry-android-okhttp
has been removed in favor ofsentry-okhttp
, removing android dependency from the module (#3510)
Fixes
- Support spans that are split into multiple batches (#3539)
- When spans belonging to a single transaction were split into multiple batches for SpanExporter, we did not add all spans because the isSpanTooOld check wasn't inverted.
- Parse and use
send-default-pii
andmax-request-body-size
fromsentry.properties
(#3534) span.startChild
now uses.makeCurrent()
by default (#3544)- This caused an issue where the span tree wasn't correct because some spans were not added to their direct parent
- Partially fix bootstrap class loading (#3543)
- There was a problem with two separate Sentry
Scopes
being active inside each OpenTelemetryContext
due to using context keys from more than one class loader.
- There was a problem with two separate Sentry
7.12.0-alpha.3
7.11.0
Features
- Report dropped spans (#3528)
Fixes
- Fix duplicate session start for React Native (#3504)
- Move onFinishCallback before span or transaction is finished (#3459)
- Add timestamp when a profile starts (#3442)
- Move fragment auto span finish to onFragmentStarted (#3424)
- Remove profiling timeout logic and disable profiling on API 21 (#3478)
- Properly reset metric flush flag on metric emission (#3493)
- Use SecureRandom in favor of Random for Metrics (#3495)
- Fix UncaughtExceptionHandlerIntegration Memory Leak (#3398)
- Deprecated
User.segment
. Use a custom tag or context instead. (#3511) - Fix duplicated http spans (#3526)
- When capturing unhandled hybrid exception session should be ended and new start if need (#3480)
Dependencies
8.0.0-alpha.2
Behavioural Changes
- (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
- Checkout the
sentry-samples/sentry-samples-android
example on how to configure CMake and consumesentry.h
Features
- Our
sentry-opentelemetry-agent
has been completely reworked and now plays nicely with the rest of the Java SDK- You may also want to give this new agent a try even if you haven't used OpenTelemetry (with Sentry) before. It offers support for many more libraries and frameworks, improving on our trace propagation,
Scopes
(used to beHub
) propagation as well as performance instrumentation (i.e. more spans). - If you are using a framework we did not support before and currently resort to manual instrumentation, please give the agent a try. See here for a list of supported libraries, frameworks and application servers.
- NOTE: Not all features have been implemented yet for the OpenTelemetry agent. Features of note that are not working yet:
- Metrics
- Measurements
forceFinish
on transactionscheduleFinish
on transaction- see #3436 for a more up-to-date list of features we have (not) implemented
- Please see "Installing
sentry-opentelemetry-agent
" for more details on how to set up the agent. - What's new about the Agent
- When the OpenTelemetry Agent is used, Sentry API creates OpenTelemetry spans under the hood, handing back a wrapper object which bridges the gap between traditional Sentry API and OpenTelemetry. We might be replacing some of the Sentry performance API in the future.
- This is achieved by configuring the SDK to use
OtelSpanFactory
instead ofDefaultSpanFactory
which is done automatically by the auto init of the Java Agent.
- This is achieved by configuring the SDK to use
- OpenTelemetry spans are now only turned into Sentry spans when they are finished so they can be sent to the Sentry server.
- Now registers an OpenTelemetry
Sampler
which uses Sentry sampling configuration - Other Performance integrations automatically stop creating spans to avoid duplicate spans
- The Sentry SDK now makes use of OpenTelemetry
Context
for storing SentryScopes
(which is similar to what used to be calledHub
) and thus relies on OpenTelemetry forContext
propagation. - Classes used for the previous version of our OpenTelemetry support have been deprecated but can still be used manually. We're not planning to keep the old agent around in favor of less complexity in the SDK.
- When the OpenTelemetry Agent is used, Sentry API creates OpenTelemetry spans under the hood, handing back a wrapper object which bridges the gap between traditional Sentry API and OpenTelemetry. We might be replacing some of the Sentry performance API in the future.
- You may also want to give this new agent a try even if you haven't used OpenTelemetry (with Sentry) before. It offers support for many more libraries and frameworks, improving on our trace propagation,
- Add
ignoredSpanOrigins
option for ignoring spans coming from certain integrations- We pre-configure this to ignore Performance instrumentation for Spring and other integrations when using our OpenTelemetry Agent to avoid duplicate spans
- Add data fetching environment hint to breadcrumb for GraphQL (#3413) (#3431)
Fixes
TracesSampler
is now only created once inSentryOptions
instead of creating a new one for everyHub
(which is nowScopes
). This means we're now creating fewerSecureRandom
instances.- Move onFinishCallback before span or transaction is finished (#3459)
- Add timestamp when a profile starts (#3442)
- Move fragment auto span finish to onFragmentStarted (#3424)
- Remove profiling timeout logic and disable profiling on API 21 (#3478)
- Properly reset metric flush flag on metric emission (#3493)
Migration Guide / Deprecations
- Classes used for the previous version of the Sentry OpenTelemetry Java Agent have been deprecated (
SentrySpanProcessor
,SentryPropagator
,OpenTelemetryLinkErrorEventProcessor
) - Sentry OpenTelemetry Java Agent has been reworked and now allows you to manually create spans using Sentry API as well.
- Please see "Installing
sentry-opentelemetry-agent
" for more details on how to set up the agent.
Installing sentry-opentelemetry-agent
Upgrading from a previous agent
If you've been using the previous version of sentry-opentelemetry-agent
, simply replace the agent JAR with the latest release and start your application. That should be it.
New to the agent
If you've not been using OpenTelemetry before, you can add sentry-opentelemetry-agent
to your setup by downloading the latest release and using it when starting up your application
- SENTRY_PROPERTIES_FILE=sentry.properties java -javaagent:sentry-opentelemetry-agent-x.x.x.jar -jar your-application.jar
- Please use sentry.properties
or environment variables to configure the SDK as the agent is now in charge of initializing the SDK and options coming from things like logging integrations or our Spring Boot integration will not take effect.
- You may find the docs page useful. While we haven't updated it yet to reflect the changes described here, the section about using the agent with auto init should still be valid.
If you want to skip auto initialization of the SDK performed by the agent, please follow the steps above and set the environment variable SENTRY_AUTO_INIT
to false
then add the following to your Sentry.init
:
Sentry.init(options -> {
options.setDsn("https://[email protected]/1801383");
OpenTelemetryUtil.applyOpenTelemetryOptions(options);
...
});
If you're using our Spring (Boot) integration with auto init, use the following:
@Bean
Sentry.OptionsConfiguration<SentryOptions> optionsConfiguration() {
return (options) -> {
OpenTelemetryUtil.applyOpenTelemetryOptions(options);
};
}