Releases: getsentry/sentry-java
8.5.0 (Stable)
Features
-
Add native stack frame address information and debug image metadata to ANR events (#4061)
- This enables symbolication for stripped native code in ANRs
-
Add Continuous Profiling Support (#3710)
To enable Continuous Profiling use the
Sentry.startProfilerandSentry.stopProfilerexperimental APIs. Sampling rate can be set throughoptions.profileSessionSampleRate, which defaults to null (disabled).
Note: Bothoptions.profilesSamplerandoptions.profilesSampleRatemust not be set to enable Continuous Profiling.import io.sentry.ProfileLifecycle; import io.sentry.android.core.SentryAndroid; SentryAndroid.init(context) { options -> // Currently under experimental options: options.getExperimental().setProfileSessionSampleRate(1.0); // In manual mode, you need to start and stop the profiler manually using Sentry.startProfiler and Sentry.stopProfiler // In trace mode, the profiler will start and stop automatically whenever a sampled trace starts and finishes options.getExperimental().setProfileLifecycle(ProfileLifecycle.MANUAL); } // Start profiling Sentry.startProfiler(); // After all profiling is done, stop the profiler. Profiles can last indefinitely if not stopped. Sentry.stopProfiler();
import io.sentry.ProfileLifecycle import io.sentry.android.core.SentryAndroid SentryAndroid.init(context) { options -> // Currently under experimental options: options.experimental.profileSessionSampleRate = 1.0 // In manual mode, you need to start and stop the profiler manually using Sentry.startProfiler and Sentry.stopProfiler // In trace mode, the profiler will start and stop automatically whenever a sampled trace starts and finishes options.experimental.profileLifecycle = ProfileLifecycle.MANUAL } // Start profiling Sentry.startProfiler() // After all profiling is done, stop the profiler. Profiles can last indefinitely if not stopped. Sentry.stopProfiler()
To learn more visit Sentry's Continuous Profiling documentation page.
Fixes
- Reduce excessive CPU usage when serializing breadcrumbs to disk for ANRs (#4181)
- Ensure app start type is set, even when ActivityLifecycleIntegration is not running (#4250)
- Use
SpringServletTransactionNameProvideras fallback for Spring WebMVC (#4263)- In certain cases the SDK was not able to provide a transaction name automatically and thus did not finish the transaction for the request.
- We now first try
SpringMvcTransactionNameProviderwhich would provide the route as transaction name. - If that does not return anything, we try
SpringServletTransactionNameProvidernext, which returns the URL of the request.
Behavioral Changes
- The user's
device.nameis not reported anymore via the device context, even ifoptions.isSendDefaultPiiis enabled (#4179)
Dependencies
7.22.3
8.4.0
Fixes
- The SDK now handles
nullon many APIs instead of expecting a nonnullvalue (#4245)- Certain APIs like
setTag,setData,setExtra,setContextpreviously caused aNullPointerExceptionwhen invoked with eithernullkey or value. - The SDK now tries to have a sane fallback when
nullis passed and no longer throwsNullPointerException - If
nullis passed, the SDK will- do nothing if a
nullkey is passed, returningnullfor 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
Requestby 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
Throwableto 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)
SamplingContextnow has agetAttributemethod 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.clientfor spanopif not a root span (#4257) - Avoid unnecessary copies when using
CopyOnWriteArrayList(#4247)- This affects in particular
SentryTracer.getLatestActiveSpanwhich would have previously copied all child span references. This may have causedOutOfMemoryErroron 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=trueinsentry.propertiesto enable it - Set
sentry.capture-open-telemetry-events=truein Springsapplication.propertiesto enable it - Set
sentry.captureOpenTelemetryEvents: truein Springsapplication.ymlto enable it
- OpenTelemetry spans may have exceptions attached to them (
Behavioural Changes
- Use
java.net.URIfor 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
requestin 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/attributesof the event.
- The
ignoredErrorsoption 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
enableTraceIdGenerationto 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=trueinapplication.propertiesorsentry.keepTransactionsOpenForAsyncResponses: trueinapplication.yml
- To enable it, please set
- Add constructor to JUL
SentryHandlerfor 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,ignoredTransactionsandignoredCheckIns - 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.setTracePropagationTargetsis 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
tracePropagationTargetsin OpenTelemetry propagator (#4191)- If a URL can be retrieved from OpenTelemetry span attributes, we check it against
tracePropagationTargetsbefore attachingsentry-traceandbaggageheaders 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,ignoredTransactionsandignoredCheckInsbeing unset by external options likesentry.propertiesor ENV vars (#4207)- Whenever parsing of external options was enabled (
enableExternalConfiguration), which is the default for many integrations, the values set onSentryOptionspassed toSentry.initwould 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.ReactorUtilsis now deprecated, please useio.sentry.reactor.SentryReactorUtilsin the newsentry-reactormodule instead (#4155)- The new module will be exposed as an
apidependency 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
Appcontext (#3193) - Expose new
withSentryObservableEffectmethod overload that acceptsSentryNavigationListeneras a parameter (#4143)- This allows sharing the same
SentryNavigationListenerinstance 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
baggageheader on outgoing requests
- The random value used for sampling traces is now sent to Sentry and attached to the
- Update
sampleRatethat is sent to Sentry and attached to thebaggageheader on outgoing requests (#4158)- If the SDK uses its
sampleRateortracesSamplercallback, it now updates thesampleRatein 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
OtelContextScopesStoragecannot be found (#4127)- Previously
java.lang.ClassNotFoundException: io.sentry.opentelemetry.OtelContextScopesStoragewas 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
FileNotFoundExceptionwhen trying to read/write.ongoing_segmentfile - Fix
IllegalStateExceptionwhen registeringonDrawListener - Fix SIGABRT native crashes on Motorola devices when encoding a video
- Fix
- Mention javadoc and sources for published artifacts in Gradle
.modulemetadata (#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
FileNotFoundExceptionwhen trying to read/write.ongoing_segmentfile - Fix
IllegalStateExceptionwhen 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.ignoredErrorsto 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
requestdetails 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.ClassNotFoundExceptiondebug 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.AgentlessMarkerandio.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
typetosuppressedfor 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.