- Fix testTag not working for Jetpack Compose user interaction tracking (#3878)
- Android 15: Add support for 16KB page sizes (#3620)
- See https://developer.android.com/guide/practices/page-sizes for more details
- Session Replay: Add
beforeSendReplay
callback (#3855) - Session Replay: Add support for masking/unmasking view containers (#3881)
- Avoid collecting normal frames (#3782)
- Ensure android initialization process continues even if options configuration block throws an exception (#3887)
- Do not report parsing ANR error when there are no threads (#3888)
- This should significantly reduce the number of events with message "Sentry Android SDK failed to parse system thread dump..." reported
- Session Replay: Disable replay in session mode when rate limit is active (#3854)
- Add meta option to set the maximum amount of breadcrumbs to be logged. (#3836)
- Use a separate
Random
instance per thread to improve SDK performance (#3835)
- Using MaxBreadcrumb with value 0 no longer crashes. (#3836)
- Accept manifest integer values when requiring floating values (#3823)
- Fix standalone tomcat jndi issue (#3873)
- Using Sentry Spring Boot on a standalone tomcat caused the following error:
- Failed to bind properties under 'sentry.parsed-dsn' to io.sentry.Dsn
- Using Sentry Spring Boot on a standalone tomcat caused the following error:
- Add meta option to attach ANR thread dumps (#3791)
- Cache parsed Dsn (#3796)
- fix invalid profiles when the transaction name is empty (#3747)
- Deprecate
enableTracing
option (#3777) - Vendor
java.util.Random
and replacejava.security.SecureRandom
usages (#3783) - Fix potential ANRs due to NDK scope sync (#3754)
- Fix potential ANRs due to NDK System.loadLibrary calls (#3670)
- Fix slow
Log
calls on app startup (#3793) - Fix slow Integration name parsing (#3794)
- Session Replay: Reduce startup and capture overhead (#3799)
- Load lazy fields on init in the background (#3803)
- Replace setOf with HashSet.add (#3801)
- The method
addIntegrationToSdkVersion(Ljava/lang/Class;)V
has been removed from the core (io.sentry:sentry
) package. Please make sure all of the packages (e.g.io.sentry:sentry-android-core
,io.sentry:sentry-android-fragment
,io.sentry:sentry-okhttp
and others) are all aligned and using the same version to prevent theNoSuchMethodError
exception.
- Add meta option to attach ANR thread dumps (#3791)
- Cache parsed Dsn (#3796)
- fix invalid profiles when the transaction name is empty (#3747)
- Deprecate
enableTracing
option (#3777) - Vendor
java.util.Random
and replacejava.security.SecureRandom
usages (#3783) - Fix potential ANRs due to NDK scope sync (#3754)
- Fix potential ANRs due to NDK System.loadLibrary calls (#3670)
- Fix slow
Log
calls on app startup (#3793) - Fix slow Integration name parsing (#3794)
- Session Replay: Reduce startup and capture overhead (#3799)
- Add support for
feedback
envelope header item type (#3687) - Add breadcrumb.origin field (#3727)
- Session Replay: Add options to selectively mask/unmask views captured in replay. The following options are available: (#3689)
android:tag="sentry-mask|sentry-unmask"
in XML orview.setTag("sentry-mask|sentry-unmask")
in code tags- if you already have a tag set for a view, you can set a tag by id:
<tag android:id="@id/sentry_privacy" android:value="mask|unmask"/>
in XML orview.setTag(io.sentry.android.replay.R.id.sentry_privacy, "mask|unmask")
in code
- if you already have a tag set for a view, you can set a tag by id:
view.sentryReplayMask()
orview.sentryReplayUnmask()
extension functions- mask/unmask
View
s of a certain type by adding fully-qualified classname to one of the listsoptions.experimental.sessionReplay.addMaskViewClass()
oroptions.experimental.sessionReplay.addUnmaskViewClass()
. Note, that all of the view subclasses/subtypes will be masked/unmasked as well- For example, (this is already a default behavior) to mask all
TextView
s and their subclasses (RadioButton
,EditText
, etc.):options.experimental.sessionReplay.addMaskViewClass("android.widget.TextView")
- If you're using code obfuscation, adjust your proguard-rules accordingly, so your custom view class name is not minified
- For example, (this is already a default behavior) to mask all
- Session Replay: Support Jetpack Compose masking (#3739)
- To selectively mask/unmask @Composables, use
Modifier.sentryReplayMask()
andModifier.sentryReplayUnmask()
modifiers
- To selectively mask/unmask @Composables, use
- Session Replay: Mask
WebView
,VideoView
andandroidx.media3.ui.PlayerView
by default (#3775)
- Avoid stopping appStartProfiler after application creation (#3630)
- Session Replay: Correctly detect dominant color for
TextView
s with Spans (#3682) - Fix ensure Application Context is used even when SDK is initialized via Activity Context (#3669)
- Fix potential ANRs due to
Calendar.getInstance
usage in Breadcrumbs constructor (#3736) - Fix potential ANRs due to default integrations (#3778)
- Lazily initialize heavy
SentryOptions
members to avoid ANRs on app start (#3749)
Breaking changes:
options.experimental.sessionReplay.errorSampleRate
was renamed tooptions.experimental.sessionReplay.onErrorSampleRate
(#3637)- Manifest option
io.sentry.session-replay.error-sample-rate
was renamed toio.sentry.session-replay.on-error-sample-rate
(#3637) - Change
redactAllText
andredactAllImages
tomaskAllText
andmaskAllImages
(#3741)
- Session Replay: Gesture/touch support for Flutter (#3623)
- 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
- Introduce
ReplayShadowMediaCodec
and refactor tests using custom encoder (#3612)
- 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
- 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
- Bump Spring Boot to 3.3.2 (#3541)
- Check app start spans time and ignore background app starts (#3550)
- This should eliminate long-lasting App Start transactions
-
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 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.
- Report dropped spans (#3528)
- 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)
- Publish Gradle module metadata (#3422)
- Fix faulty
span.frame_delay
calculation for early app start spans (#3427) - Fix crash when installing
ShutdownHookIntegration
and the VM is shutting down (#3456)
- (Internal) Metrics code cleanup (#3403)
- Fix Frame measurements in app start transactions (#3382)
- Fix timing metric value different from span duration (#3368)
- Do not always write startup crash marker (#3409)
- This may have been causing the SDK init logic to block the main thread
- Add rate limit to Metrics (#3334)
- Fix java.lang.ClassNotFoundException: org.springframework.web.servlet.HandlerMapping in Spring Boot Servlet mode without WebMVC (#3336)
- Fix normalization of metrics keys, tags and values (#3332)
- Fixed default deadline timeout to 30s instead of 300s (#3322)
- Fixed
Fix java.lang.ClassNotFoundException: org.springframework.web.servlet.HandlerExceptionResolver
in Spring Boot Servlet mode without WebMVC (#3333)
- Experimental: Add support for Sentry Developer Metrics (#3205, #3238, #3248, #3250)
Use the Metrics API to track processing time, download sizes, user signups, and conversion rates and correlate them back to tracing data in order to get deeper insights and solve issues faster. Our API supports counters, distributions, sets, gauges and timers, and it's easy to get started:To learn more about Sentry Developer Metrics, head over to our Java and Android docs page.Sentry.metrics() .increment( "button_login_click", // key 1.0, // value null, // unit mapOf( // tags "provider" to "e-mail" ) )
- Add support for measurements at span level (#3219)
- Add
enableScopePersistence
option to disablePersistingScopeObserver
used for ANR reporting which may increase performance overhead. Defaults totrue
(#3218)- When disabled, the SDK will not enrich ANRv2 events with scope data (e.g. breadcrumbs, user, tags, etc.)
- Configurable defaults for Cron - MonitorConfig (#3195)
- We now display a warning on startup if an incompatible version of Spring Boot is detected (#3233)
- This should help notice a mismatching Sentry dependency, especially when upgrading a Spring Boot application
- Experimental: Add Metrics API (#3205)
- Ensure performance measurement collection is not taken too frequently (#3221)
- Fix old profiles deletion on SDK init (#3216)
- Fix hub restore point in wrappers: SentryWrapper, SentryTaskDecorator and SentryScheduleHook (#3225)
- We now reset the hub to its previous value on the thread where the
Runnable
/Callable
/Supplier
is executed instead of setting it to the hub that was used on the thread where theRunnable
/Callable
/Supplier
was created.
- We now reset the hub to its previous value on the thread where the
- Fix add missing thread name/id to app start spans (#3226)
- Add new threshold parameters to monitor config (#3181)
- Report process init time as a span for app start performance (#3159)
- (perf-v2): Calculate frame delay on a span level (#3197)
- Resolve spring properties in @SentryCheckIn annotation (#3194)
- Experimental: Add Spotlight integration (#3166)
- For more details about Spotlight head over to https://spotlightjs.com/
- Set
options.isEnableSpotlight = true
to enable Spotlight
- Don't wait on main thread when SDK restarts (#3200)
- Fix Jetpack Compose widgets are not being correctly identified for user interaction tracing (#3209)
- Fix issue title on Android when a wrapping
RuntimeException
is thrown by the system (#3212)- This will change grouping of the issues that were previously titled
RuntimeInit$MethodAndArgsCaller
to have them split up properly by the original root cause exception
- This will change grouping of the issues that were previously titled
- Added App Start profiling
- This depends on the new option
io.sentry.profiling.enable-app-start
, other than the already existingio.sentry.traces.profiling.sample-rate
. - Sampler functions can check the new
isForNextAppStart
flag, to adjust startup profiling sampling programmatically. Relevant PRs: - Decouple Profiler from Transaction (#3101)
- Add options and sampling logic (#3121)
- Add ContentProvider and start profile (#3128)
- This depends on the new option
- Extend internal performance collector APIs (#3102)
- Collect slow and frozen frames for spans using
OnFrameMetricsAvailableListener
(#3111) - Interpolate total frame count to match span duration (#3158)
- Avoid multiple breadcrumbs from OkHttpEventListener (#3175)
- Apply OkHttp listener auto finish timestamp to all running spans (#3167)
- Fix not eligible for auto proxying warnings (#3154)
- Set default fingerprint for ANRv2 events to correctly group background and foreground ANRs (#3164)
- This will improve grouping of ANRs that have similar stacktraces but differ in background vs foreground state. Only affects newly-ingested ANR events with
mechanism:AppExitInfo
- This will improve grouping of ANRs that have similar stacktraces but differ in background vs foreground state. Only affects newly-ingested ANR events with
- Fix UserFeedback disk cache name conflicts with linked events (#3116)
- Remove
HostnameVerifier
option as it's flagged by security tools of some app stores (#3150)- If you were using this option, you have 3 possible paths going forward:
- Provide a custom
ITransportFactory
throughSentryOptions.setTransportFactory()
, where you can copy over most of the parts likeHttpConnection
andAsyncHttpTransport
from the SDK with necessary modifications - Get a certificate for your server through e.g. Let's Encrypt
- Fork the SDK and add the hostname verifier back
- Provide a custom
- If you were using this option, you have 3 possible paths going forward:
- Handle
monitor
/check_in
in client reports and rate limiter (#3096) - Add support for
graphql-java
version 21 (#3090)
- Avoid concurrency in AndroidProfiler performance data collection (#3130)
- Improve thresholds for network changes breadcrumbs (#3083)
- SchedulerFactoryBeanCustomizer now runs first so user customization is not overridden (#3095)
- If you are setting global job listeners please also add
SentryJobListener
- If you are setting global job listeners please also add
- Ensure serialVersionUID of Exception classes are unique (#3115)
- Get rid of "is not eligible for getting processed by all BeanPostProcessors" warnings in Spring Boot (#3108)
- Fix missing
release
and other fields for ANRs reported withmechanism:AppExitInfo
(#3074)
- Bump
opentelemetry-sdk
to1.33.0
andopentelemetry-javaagent
to1.32.0
(#3112)
- Support multiple debug-metadata.properties (#3024)
- Automatically downsample transactions when the system is under load (#3072)
- You can opt into this behaviour by setting
enable-backpressure-handling=true
. - We're happy to receive feedback, e.g. in this GitHub issue
- When the system is under load we start reducing the
tracesSampleRate
automatically. - Once the system goes back to healthy, we reset the
tracesSampleRate
to its original value.
- You can opt into this behaviour by setting
- (Android) Experimental: Provide more detailed cold app start information (#3057)
- Attaches spans for Application, ContentProvider, and Activities to app-start timings
- Application and ContentProvider timings are added using bytecode instrumentation, which requires sentry-android-gradle-plugin version
4.1.0
or newer - Uses Process.startUptimeMillis to calculate app-start timings
- To enable this feature set
options.isEnablePerformanceV2 = true
- Move slow+frozen frame calculation, as well as frame delay inside SentryFrameMetricsCollector (#3100)
- Extract Activity Breadcrumbs generation into own Integration (#3064)
- Send breadcrumbs and client error in
SentryOkHttpEventListener
even without transactions (#3087) - Keep
io.sentry.exception.SentryHttpClientException
from obfuscation to display proper issue title on Sentry (#3093) - (Android) Fix wrong activity transaction duration in case SDK init is deferred (#3092)
Version 7 of the Sentry Android/Java SDK brings a variety of features and fixes. The most notable changes are:
- Bumping
minSdk
level to 19 (Android 4.4) - The SDK will now listen to connectivity changes and try to re-upload cached events when internet connection is re-established additionally to uploading events on app restart
Sentry.getSpan
now returns the root transaction, which should improve the span hierarchy and make it leaner- Multiple improvements to reduce probability of the SDK causing ANRs
- New
sentry-okhttp
artifact is unbundled from Android and can be used in pure JVM-only apps
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.
Make sure to align all Sentry dependencies to the same version when bumping the SDK to 7.+, otherwise it will crash at runtime due to binary incompatibility. (E.g. if you're using -timber
, -okhttp
or other packages)
For example, if you're using the Sentry Android Gradle plugin with the autoInstallation
feature (enabled by default), make sure to use version 4.+ of the gradle plugin together with version 7.+ of the SDK. If you can't do that for some reason, you can specify sentry version via the plugin config block:
sentry {
autoInstallation {
sentryVersion.set("7.0.0")
}
}
Similarly, if you have a Sentry SDK (e.g. sentry-android-core
) dependency on one of your Gradle modules and you're updating it to 7.+, make sure the Gradle plugin is at 4.+ or specify the SDK version as shown in the snippet above.
- Bump min API to 19 (#2883)
- If you're using
sentry-kotlin-extensions
, it requireskotlinx-coroutines-core
version1.6.1
or higher now (#2838) - Move enableNdk from SentryOptions to SentryAndroidOptions (#2793)
- Apollo v2 BeforeSpanCallback now allows returning null (#2890)
SentryOkHttpUtils
was removed from public API as it's been exposed by mistake (#3005)Scope
now implements theIScope
interface, therefore some methods likeScopeCallback.run
acceptIScope
now (#3066)- Cleanup
startTransaction
overloads (#2964)- We have reduced the number of overloads by allowing to pass in a
TransactionOptions
object instead of having separate parameters for certain options TransactionOptions
has defaults set and can be customized, for example:
- We have reduced the number of overloads by allowing to pass in a
// old
val transaction = Sentry.startTransaction("name", "op", bindToScope = true)
// new
val transaction = Sentry.startTransaction("name", "op", TransactionOptions().apply { isBindToScope = true })
- Android only:
Sentry.getSpan()
returns the root span/transaction instead of the latest span (#2855) - Capture failed HTTP and GraphQL (Apollo) requests by default (#2794)
- This can increase your event consumption and may affect your quota, because we will report failed network requests as Sentry events by default, if you're using the
sentry-android-okhttp
orsentry-apollo-3
integrations. You can customize what errors you want/don't want to have reported for OkHttp and Apollo3 respectively.
- This can increase your event consumption and may affect your quota, because we will report failed network requests as Sentry events by default, if you're using the
- Measure AppStart time till First Draw instead of
onResume
(#2851) - Automatic user interaction tracking: every click now starts a new automatic transaction (#2891)
- Previously performing a click on the same UI widget twice would keep the existing transaction running, the new behavior now better aligns with other SDKs
- Add deadline timeout for automatic transactions (#2865)
- This affects all automatically generated transactions on Android (UI, clicks), the default timeout is 30s, meaning the automatic transaction will be force-finished with status
deadline_exceeded
when reaching the deadline
- This affects all automatically generated transactions on Android (UI, clicks), the default timeout is 30s, meaning the automatic transaction will be force-finished with status
- Set ip_address to {{auto}} by default, even if sendDefaultPII is disabled (#2860)
- Instead use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on sentry.io
- Raw logback message and parameters are now guarded by
sendDefaultPii
if anencoder
has been configured (#2976) - The
maxSpans
setting (defaults to 1000) is enforced for nested child spans which means a single transaction can havemaxSpans
number of children (nested or not) at most (#3065) - The
ScopeCallback
inwithScope
is now always executed (#3066)
sentry-android-okhttp
was deprecated in favour of the newsentry-okhttp
module. Make sure to replaceio.sentry.android.okhttp
package name withio.sentry.okhttp
before the next major, where the classes will be removed (#3005)
- Observe network state to upload any unsent envelopes (#2910)
- Android: it works out-of-the-box as part of the default
SendCachedEnvelopeIntegration
- JVM: you'd have to install
SendCachedEnvelopeFireAndForgetIntegration
as mentioned in https://docs.sentry.io/platforms/java/configuration/#configuring-offline-caching and provide your own implementation ofIConnectionStatusProvider
viaSentryOptions
- Android: it works out-of-the-box as part of the default
- Add
sentry-okhttp
module to support instrumenting OkHttp in non-Android projects (#3005) - Do not filter out Sentry SDK frames in case of uncaught exceptions (#3021)
- Do not try to send and drop cached envelopes when rate-limiting is active (#2937)
- Use
getMyMemoryState()
instead ofgetRunningAppProcesses()
to retrieve process importance (#3004)- This should prevent some app stores from flagging apps as violating their privacy
- Reduce flush timeout to 4s on Android to avoid ANRs (#2858)
- Reduce timeout of AsyncHttpTransport to avoid ANR (#2879)
- Do not overwrite UI transaction status if set by the user (#2852)
- Capture unfinished transaction on Scope with status
aborted
in case a crash happens (#2938)- This will fix the link between transactions and corresponding crashes, you'll be able to see them in a single trace
- Fix Coroutine Context Propagation using CopyableThreadContextElement (#2838)
- Fix don't overwrite the span status of unfinished spans (#2859)
- Migrate from
default
interface methods to proper implementations in each interface implementor (#2847)- This prevents issues when using the SDK on older AGP versions (< 4.x.x)
- Reduce main thread work on init (#3036)
- Move Integrations registration to background on init (#3043)
- Fix
SentryOkHttpInterceptor.BeforeSpanCallback
was not finishing span when it was dropped (#2958)
- Add current activity name to app context (#2999)
- Add
MonitorConfig
param toCheckInUtils.withCheckIn
(#3038)- This makes it easier to automatically create or update (upsert) monitors.
- (Internal) Extract Android Profiler and Measurements for Hybrid SDKs (#3016)
- (Internal) Remove SentryOptions dependency from AndroidProfiler (#3051)
- (Internal) Add
readBytesFromFile
for use in Hybrid SDKs (#3052) - (Internal) Add
getProguardUuid
for use in Hybrid SDKs (#3054)
- Fix SIGSEV, SIGABRT and SIGBUS crashes happening after/around the August Google Play System update, see #2955 for more details (fix provided by Native SDK bump)
- Ensure DSN uses http/https protocol (#3044)
- Fix SIGSEV, SIGABRT and SIGBUS crashes happening after/around the August Google Play System update, see #2955 for more details (fix provided by Native SDK bump)
- Do not register
sentrySpringFilter
in ServletContext for Spring Boot (#3027)
- Add thread information to spans (#2998)
- Use PixelCopy API for capturing screenshots on API level 24+ (#3008)
- Fix crash when HTTP connection error message contains formatting symbols (#3002)
- Cap max number of stack frames to 100 to not exceed payload size limit (#3009)
- This will ensure we report errors with a big number of frames such as
StackOverflowError
- This will ensure we report errors with a big number of frames such as
- Fix user interaction tracking not working for Jetpack Compose 1.5+ (#3010)
- Make sure to close all Closeable resources (#3000)
- Make
DebugImagesLoader
public (#2993)
- Make
SystemEventsBroadcastReceiver
exported on API 33+ (#2990)- This will fix the
SystemEventsBreadcrumbsIntegration
crashes that you might have encountered on Play Console
- This will fix the
- Improve default debouncing mechanism (#2945)
- Add
CheckInUtils.withCheckIn
which abstracts away some of the manual check-ins complexity (#2959) - Add
@SentryCaptureExceptionParameter
annotation which captures exceptions passed into an annotated method (#2764)- This can be used to replace
Sentry.captureException
calls in@ExceptionHandler
of a@ControllerAdvice
- This can be used to replace
- Add
ServerWebExchange
toHint
for WebFlux asWEBFLUX_EXCEPTION_HANDLER_EXCHANGE
(#2977) - Allow filtering GraphQL errors (#2967)
- This list can be set directly when calling the constructor of
SentryInstrumentation
- For Spring Boot it can also be set in
application.properties
assentry.graphql.ignored-error-types=SOME_ERROR,ANOTHER_ERROR
- This list can be set directly when calling the constructor of
- Add OkHttp span auto-close when response body is not read (#2923)
- Fix json parsing of nullable/empty fields for Hybrid SDKs (#2968)
- (Internal) Rename
nextList
tonextListOrNull
to actually match what the method does - (Hybrid) Check if there's any object in a collection before trying to parse it (which prevents the "Failed to deserilize object in list" log message)
- (Hybrid) If a date can't be parsed as an ISO timestamp, attempts to parse it as millis silently, without printing a log message
- (Hybrid) If
op
is not defined as part ofSpanContext
, fallback to an empty string, because the filed is optional in the spec
- (Internal) Rename
- Always attach OkHttp errors and Http Client Errors only to call root span (#2961)
- Fixed crash accessing Choreographer instance (#2970)
- Add
sendModules
option for disable sending modules (#2926) - Send
db.system
anddb.name
in span data for androidx.sqlite spans (#2928) - Check-ins (CRONS) support (#2952)
- Always send memory stats for transactions (#2936)
- This makes it possible to query transactions by the
device.class
tag on Sentry
- This makes it possible to query transactions by the
- Add
sentry.enable-aot-compatibility
property to SpringBoot JakartaSentryAutoConfiguration
to enable building for GraalVM (#2915)
- Bump Gradle from v8.2.1 to v8.3.0 (#2900)
- [changelog](https://github.com/gradle/gradle/blob/master release-test/CHANGELOG.md#v830)
- diff
- Send
db.system
anddb.name
in span data (#2894) - Send
http.request.method
in span data (#2896) - Add
enablePrettySerializationOutput
option for opting out of pretty print (#2871)
- Add HTTP response code to Spring WebFlux transactions (#2870)
- Add
sampled
to Dynamic Sampling Context (#2869) - Improve server side GraphQL support for spring-graphql and Nextflix DGS (#2856)
- If you have already been using
SentryDataFetcherExceptionHandler
that still works but has been deprecated. Please useSentryGenericDataFetcherExceptionHandler
combined withSentryInstrumentation
instead for better error reporting. - More exceptions and errors caught and reported to Sentry by also looking at the
ExecutionResult
(more specifically itserrors
)- You may want to filter out certain errors, please see docs on filtering
- More details for Sentry events: query, variables and response (where possible)
- Breadcrumbs for operation (query, mutation, subscription), data fetchers and data loaders (Spring only)
- Better hub propagation by using
GraphQLContext
- If you have already been using
- Add autoconfigure modules for Spring Boot called
sentry-spring-boot
andsentry-spring-boot-jakarta
(#2880)- The autoconfigure modules
sentry-spring-boot
andsentry-spring-boot-jakarta
have acompileOnly
dependency onspring-boot-starter
which is needed for our auto installation in sentry-android-gradle-plugin - The starter modules
sentry-spring-boot-starter
andsentry-spring-boot-starter-jakarta
now bringspring-boot-starter
as a dependency
- The autoconfigure modules
- You can now disable Sentry by setting the
enabled
option tofalse
(#2840)
- Propagate OkHttp status to parent spans (#2872)
- Add TraceOrigin to Transactions and Spans (#2803)
- Deduplicate events happening in multiple threads simultaneously (e.g.
OutOfMemoryError
) (#2845)- This will improve Crash-Free Session Rate as we no longer will send multiple Session updates with
Crashed
status, but only the one that is relevant
- This will improve Crash-Free Session Rate as we no longer will send multiple Session updates with
- Ensure no Java 8 method reference sugar is used for Android (#2857)
- Do not send session updates for terminated sessions (#2849)
- Fix ANRv2 thread dump parsing for native-only threads (#2839)
- Derive
TracingContext
values from event for ANRv2 events (#2839)
- Change Spring Boot, Apollo, Apollo 3, JUL, Logback, Log4j2, OpenFeign, GraphQL and Kotlin coroutines core dependencies to compileOnly (#2837)
- Allow removing integrations in SentryAndroid.init (#2826)
- Fix concurrent access to frameMetrics listener (#2823)
- Add manifest
AutoInit
to integrations list (#2795) - Tracing headers (
sentry-trace
andbaggage
) are now attached and passed through even if performance is disabled (#2788)
- Set
environment
fromSentryOptions
if none persisted in ANRv2 (#2809) - Remove code that set
tracesSampleRate
to0.0
for Spring Boot if not set (#2800)- This used to enable performance but not send any transactions by default.
- Performance is now disabled by default.
- Fix slow/frozen frames were not reported with transactions (#2811)
- Add debouncing mechanism and before-capture callbacks for screenshots and view hierarchies (#2773)
- Improve ANRv2 implementation (#2792)
- Add a proguard rule to keep
ApplicationNotResponding
class from obfuscation - Add a new option
setReportHistoricalAnrs
; when enabled, it will report all of the ANRs from the getHistoricalExitReasons list. By default, the SDK only reports and enriches the latest ANR and only this one counts towards ANR rate. Worth noting that this option is mainly useful when updating the SDK to the version where ANRv2 has been introduced, to report all ANRs happened prior to the SDK update. After that, the SDK will always pick up the latest ANR from the historical exit reasons list on next app restart, so there should be no historical ANRs to report. These ANRs are reported with theHistoricalAppExitInfo
mechanism. - Add a new option
setAttachAnrThreadDump
to send ANR thread dump from the system as an attachment. This is only useful as additional information, because the SDK attempts to parse the thread dump into proper threads with stacktraces by default. - If ApplicationExitInfo#getTraceInputStream returns null, the SDK no longer reports an ANR event, as these events are not very useful without it.
- Enhance regex patterns for native stackframes
- Add a proguard rule to keep
- Add profile rate limiting (#2782)
- Support for automatically capturing Failed GraphQL (Apollo 3) Client errors (#2781)
import com.apollographql.apollo3.ApolloClient
import io.sentry.apollo3.sentryTracing
val apolloClient = ApolloClient.Builder()
.serverUrl("https://example.com/graphql")
.sentryTracing(captureFailedRequests = true)
.build()
- Align http.status with span data conventions (#2786)
- Add
lock
attribute to theSentryStackFrame
protocol to better highlight offending frames in the UI (#2761) - Enrich database spans with blocked main thread info (#2760)
- Add
api_target
toRequest
anddata
toResponse
Protocols (#2775)
- No longer use
String.join
inBaggage
as it requires API level 26 (#2778)
- Introduce new
sentry-android-sqlite
integration (#2722)- This integration replaces the old
androidx.sqlite
database instrumentation in the Sentry Android Gradle plugin - A new capability to manually instrument your
androidx.sqlite
databases.- You can wrap your custom
SupportSQLiteOpenHelper
instance intoSentrySupportSQLiteOpenHelper(myHelper)
if you're not using the Sentry Android Gradle plugin and still benefit from performance auto-instrumentation.
- You can wrap your custom
- This integration replaces the old
- Add SentryWrapper for Callable and Supplier Interface (#2720)
- Load sentry-debug-meta.properties (#2734)
- This enables source context for Java
- For more information on how to enable source context, please refer to #633
- Finish WebFlux transaction before popping scope (#2724)
- Use daemon threads for SentryExecutorService (#2747)
- We started using
SentryExecutorService
in6.19.0
which caused the application to hang on shutdown unlessSentry.close()
was called. By using daemon threads we no longer block shutdown.
- We started using
- Use Base64.NO_WRAP to avoid unexpected char errors in Apollo (#2745)
- Don't warn R8 on missing
ComposeViewHierarchyExporter
class (#2743)
- Add support for Sentry Kotlin Compiler Plugin (#2695)
- In conjunction with our sentry-kotlin-compiler-plugin we improved Jetpack Compose support for
- View Hierarchy support for Jetpack Compose screens
- Automatic breadcrumbs for user interactions
- In conjunction with our sentry-kotlin-compiler-plugin we improved Jetpack Compose support for
- More granular http requests instrumentation with a new SentryOkHttpEventListener (#2659)
- Create spans for time spent on:
- Proxy selection
- DNS resolution
- HTTPS setup
- Connection
- Requesting headers
- Receiving response
- You can attach the event listener to your OkHttpClient through
client.eventListener(new SentryOkHttpEventListener()).addInterceptor(new SentryOkHttpInterceptor()).build();
- In case you already have an event listener you can use the SentryOkHttpEventListener as well through
client.eventListener(new SentryOkHttpEventListener(myListener)).addInterceptor(new SentryOkHttpInterceptor()).build();
- Create spans for time spent on:
- Add a new option to disable
RootChecker
(#2735)
- Base64 encode internal Apollo3 Headers (#2707)
- Fix
SentryTracer
crash when scheduling auto-finish of a transaction, but the timer has already been cancelled (#2731) - Fix
AndroidTransactionProfiler
crash when finishing a profile that happened due to race condition (#2731)
- Ensure screenshots and view hierarchies are captured on the main thread (#2712)
- Add Screenshot and ViewHierarchy to integrations list (#2698)
- New ANR detection based on ApplicationExitInfo API (#2697)
- This implementation completely replaces the old one (based on a watchdog) on devices running Android 11 and above:
- New implementation provides more precise ANR events/ANR rate detection as well as system thread dump information. The new implementation reports ANRs exactly as Google Play Console, without producing false positives or missing important background ANR events.
- New implementation reports ANR events with a new mechanism
mechanism:AppExitInfo
. - However, despite producing many false positives, the old implementation is capable of better enriching ANR errors (which is not available with the new implementation), for example:
- Capturing screenshots at the time of ANR event;
- Capturing transactions and profiling data corresponding to the ANR event;
- Auxiliary information (such as current memory load) at the time of ANR event.
- If you would like us to provide support for the old approach working alongside the new one on Android 11 and above (e.g. for raising events for slow code on main thread), consider upvoting this issue.
- The old watchdog implementation will continue working for older API versions (Android < 11):
- The old implementation reports ANR events with the existing mechanism
mechanism:ANR
.
- The old implementation reports ANR events with the existing mechanism
- This implementation completely replaces the old one (based on a watchdog) on devices running Android 11 and above:
- Open up
TransactionOptions
,ITransaction
andIHub
methods allowing consumers modify start/end timestamp of transactions and spans (#2701) - Send source bundle IDs to Sentry to enable source context (#2663)
- For more information on how to enable source context, please refer to #633
- Android Profiler on calling thread (#2691)
- Use
configureScope
instead ofwithScope
inHub.close()
. This ensures that the main scope releases the in-memory data when closing a hub instance. (#2688) - Remove null keys/values before creating concurrent hashmap in order to avoid NPE (#2708)
- Exclude SentryOptions from R8/ProGuard obfuscation (#2699)
- This fixes AGP 8.+ incompatibility, where full R8 mode is enforced
- Bump Gradle from v8.1.0 to v8.1.1 (#2666)
- [changelog](https://github.com/gradle/gradle/blob/master release-test/CHANGELOG.md#v811)
- diff
- Bump Native SDK from v0.6.1 to v0.6.2 (#2689)
- Fix crash when Sentry SDK is initialized more than once (#2679)
- Track a ttfd span per Activity (#2673)
- Attach Trace Context when an ANR is detected (ANRv1) (#2583)
- Make log4j2 integration compatible with log4j 3.0 (#2634)
- Instead of relying on package scanning, we now use an annotation processor to generate
Log4j2Plugins.dat
- Instead of relying on package scanning, we now use an annotation processor to generate
- Create
User
andBreadcrumb
from map (#2614) - Add
sent_at
to envelope header item (#2638)
- Fix timestamp intervals of PerformanceCollectionData in profiles (#2648)
- Fix timestamps of PerformanceCollectionData in profiles (#2632)
- Fix missing propagateMinConstraints flag for SentryTraced (#2637)
- Fix potential SecurityException thrown by ConnectivityManager on Android 11 (#2653)
- Fix aar artifacts publishing for Maven (#2641)
- Bump Kotlin compile version from v1.6.10 to 1.8.0 (#2563)
- Bump Compose compile version from v1.1.1 to v1.3.0 (#2563)
- Bump AGP version from v7.3.0 to v7.4.2 (#2574)
- Bump Gradle from v7.6.0 to v8.0.2 (#2563)
- Bump Gradle from v8.0.2 to v8.1.0 (#2650)
- Add
name
andgeo
toUser
(#2556) - Add breadcrumbs on network changes (#2608)
- Add time-to-initial-display and time-to-full-display measurements to Activity transactions (#2611)
- Read integration list written by sentry gradle plugin from manifest (#2598)
- Add Logcat adapter (#2620)
- Provide CPU count/frequency data as device context (#2622)
- Trim time-to-full-display span if reportFullyDisplayed API is never called (#2631)
- Fix Automatic UI transactions having wrong durations (#2623)
- Fix wrong default environment in Session (#2610)
- Pass through unknown sentry baggage keys into SentryEnvelopeHeader (#2618)
- Fix missing null check when removing lifecycle observer (#2625)
- Improve versatility of exception resolver component for Spring with more flexible API for consumers. (#2577)
- Automatic performance instrumentation for WebFlux (#2597)
- You can enable it by adding
sentry.enable-tracing=true
to yourapplication.properties
- You can enable it by adding
- The Spring Boot integration can now be configured to add the
SentryAppender
to specific loggers instead of theROOT
logger (#2173)- You can specify the loggers using
"sentry.logging.loggers[0]=foo.bar
and"sentry.logging.loggers[1]=baz
in yourapplication.properties
- You can specify the loggers using
- Add capabilities to track Jetpack Compose composition/rendering time (#2507)
- Adapt span op and description for graphql to fit spec (#2607)
- Fix timestamps of slow and frozen frames for profiles (#2584)
- Deprecate reportFullDisplayed in favor of reportFullyDisplayed (#2585)
- Add mechanism for logging integrations and update spring mechanism types (#2595)
- NOTE: If you're using these mechanism types (
HandlerExceptionResolver
,SentryWebExceptionHandler
) in your dashboards please update them to use the new types.
- NOTE: If you're using these mechanism types (
- Filter out session cookies sent by Spring and Spring Boot integrations (#2593)
- We filter out some common cookies like JSESSIONID
- We also read the value from
server.servlet.session.cookie.name
and filter it out
- No longer send event / transaction to Sentry if
beforeSend
/beforeSendTransaction
throws (#2591) - Add version to sentryClientName used in auth header (#2596)
- Keep integration names from being obfuscated (#2599)
- Change log level from INFO to WARN for error message indicating a failed Log4j2 Sentry.init (#2606)
- The log message was often not visible as our docs suggest a minimum log level of WARN
- Fix session tracking on Android (#2609)
- Incorrect number of session has been sent. In addition, some of the sessions were not properly ended, messing up Session Health Metrics.
- Bump
opentelemetry-sdk
to1.23.1
andopentelemetry-javaagent
to1.23.0
(#2590) - Bump Native SDK from v0.5.4 to v0.6.0 (#2545)
- Adjust time-to-full-display span if reportFullDisplayed is called too early (#2550)
- Add
enableTracing
option (#2530)- This change is backwards compatible. The default is
null
meaning existing behaviour remains unchanged (setting eithertracesSampleRate
ortracesSampler
enables performance). - If set to
true
, performance is enabled, even if notracesSampleRate
ortracesSampler
have been configured. - If set to
false
performance is disabled, regardless oftracesSampleRate
andtracesSampler
options.
- This change is backwards compatible. The default is
- Detect dependencies by listing MANIFEST.MF files at runtime (#2538)
- Report integrations in use, report packages in use more consistently (#2179)
- Implement
ThreadLocalAccessor
for propagating Sentry hub with reactor / WebFlux (#2570)- Requires
io.micrometer:context-propagation:1.0.2+
as well as Spring Boot 3.0.3+ - Enable the feature by setting
sentry.reactive.thread-local-accessor-enabled=true
- This is still considered experimental. Once we have enough feedback we may turn this on by default.
- Checkout the sample here: https://github.com/getsentry/sentry-java/tree/main/sentry-samples/sentry-samples-spring-boot-webflux-jakarta
- A new hub is now cloned from the main hub for every request
- Requires
- Leave
inApp
flag for stack frames undecided in SDK if unsure and let ingestion decide instead (#2547) - Allow
0.0
error sample rate (#2573) - Fix memory leak in WebFlux related to an ever growing stack (#2580)
- Use the same hub in WebFlux exception handler as we do in WebFilter (#2566)
- Switch upstream Jetpack Compose dependencies to
compileOnly
insentry-compose-android
(#2578)- NOTE: If you're using Compose Navigation/User Interaction integrations, make sure to have the following dependencies on the classpath as we do not bring them in transitively anymore:
androidx.navigation:navigation-compose:
androidx.compose.runtime:runtime:
androidx.compose.ui:ui:
- NOTE: If you're using Compose Navigation/User Interaction integrations, make sure to have the following dependencies on the classpath as we do not bring them in transitively anymore:
- Add time-to-full-display span to Activity auto-instrumentation (#2432)
- Add
main
flag to threads andin_foreground
flag for app contexts (#2516)
- Ignore Shutdown in progress when closing ShutdownHookIntegration (#2521)
- Fix app start span end-time is wrong if SDK init is deferred (#2519)
- Fix invalid session creation when app is launched in background (#2543)
- Fix transaction performance collector oom (#2505)
- Remove authority from URLs sent to Sentry (#2366)
- Fix
sentry-bom
containing incorrect artifacts (#2504)
- Send cpu usage percentage in profile payload (#2469)
- Send transaction memory stats in profile payload (#2447)
- Add cpu usage collection (#2462)
- Improve ANR implementation: (#2475)
- Add
abnormal_mechanism
to sessions for ANR rate calculation - Always attach thread dump to ANR events
- Distinguish between foreground and background ANRs
- Add
- Improve possible date precision to 10 μs (#2451)
- Fix performance collector setup called in main thread (#2499)
- Expand guard against CVE-2018-9492 "Privilege Escalation via Content Provider" (#2482)
- Prevent OOM by disabling TransactionPerformanceCollector for now (#2498)
- Create timer in
TransactionPerformanceCollector
lazily (#2478)
- Attach View Hierarchy to the errored/crashed events (#2440)
- Collect memory usage in transactions (#2445)
- Add
traceOptionsRequests
option to disable tracing of OPTIONS requests (#2453) - Extend list of HTTP headers considered sensitive (#2455)
- Use a single TransactionPerfomanceCollector (#2464)
- Don't override sdk name with Timber (#2450)
- Set transactionNameSource to CUSTOM when setting transaction name (#2405)
- Guard against CVE-2018-9492 "Privilege Escalation via Content Provider" (#2466)
- Disable Android concurrent profiling (#2434)
- Add logging for OpenTelemetry integration (#2425)
- Auto add
OpenTelemetryLinkErrorEventProcessor
for Spring Boot (#2429)
- Use minSdk compatible
Objects
class (#2436) - Prevent R8 from warning on missing classes, as we check for their presence at runtime (#2439)
- Add time-to-initial-display span to Activity transactions (#2369)
- Start a session after init if AutoSessionTracking is enabled (#2356)
- Provide automatic breadcrumbs and transactions for click/scroll events for Compose (#2390)
- Add
blocked_main_thread
andcall_stack
to File I/O spans to detect performance issues (#2382)
- Updated ProfileMeasurementValue types (#2412)
- Clear window reference only on activity stop in profileMeasurements collector (#2407)
- No longer disable OpenTelemetry exporters in default Java Agent config (#2408)
- Fix
ClassNotFoundException
forio.sentry.spring.SentrySpringServletContainerInitializer
insentry-spring-jakarta
(#2411) - Fix
sentry-samples-spring-jakarta
(#2411)
- Add SENTRY_AUTO_INIT environment variable to control OpenTelemetry Agent init (#2410)
- Add OpenTelemetryLinkErrorEventProcessor for linking errors to traces created via OpenTelemetry (#2418)
- Bump OpenTelemetry to 1.20.1 and OpenTelemetry Java Agent to 1.20.2 (#2420)
- OpenTelemetry modules were missing in
6.9.0
so we released the same code again as6.9.1
including OpenTelemetry modules
- Use
canonicalName
in Fragment Integration for better de-obfuscation (#2379) - Fix Timber and Fragment integrations auto-installation for obfuscated builds (#2379)
- Don't attach screenshots to events from Hybrid SDKs (#2360)
- Ensure Hints do not cause memory leaks (#2387)
- Do not attach empty
sentry-trace
andbaggage
headers (#2385)
- Add beforeSendTransaction which allows users to filter and change transactions (#2388)
- Add experimental support for OpenTelemetry (README)(#2344)
- Add FrameMetrics to Android profiling data (#2342)
- Remove profiler main thread io (#2348)
- Fix ensure all options are processed before integrations are loaded (#2377)
- Fix
Gpu.vendorId
should be a String (#2343) - Don't set device name on Android if
sendDefaultPii
is disabled (#2354) - Fix corrupted UUID on Motorola devices (#2363)
- Fix ANR on dropped uncaught exception events (#2368)
- Update Spring Boot Jakarta to Spring Boot 3.0.0-RC2 (#2347)
- Use correct set-cookie for the HTTP Client response object (#2326)
- Fix NoSuchElementException in CircularFifoQueue when cloning a Scope (#2328)
- Customizable fragment lifecycle breadcrumbs (#2299)
- Provide hook for Jetpack Compose navigation instrumentation (#2320)
- Populate
event.modules
with dependencies metadata (#2324) - Support Spring 6 and Spring Boot 3 (#2289)
- Ensure potential callback exceptions are caught #2123 (#2291)
- Remove verbose FrameMetricsAggregator failure logging (#2293)
- Ignore broken regex for tracePropagationTarget (#2288)
- No longer serialize static fields; use toString as fallback (#2309)
- Fix
SentryFileWriter
/SentryFileOutputStream
append overwrites file contents (#2304) - Respect incoming parent sampled decision when continuing a trace (#2311)
- Profile envelopes are sent directly from profiler (#2298)
- Add support for using Encoder with logback.SentryAppender (#2246)
- Report Startup Crashes (#2277)
- HTTP Client errors for OkHttp (#2287)
- Add option to enable or disable Frame Tracking (#2314)
- Improve public facing API for creating Baggage from header (#2284)
- Make user segment a top level property (#2257)
- Replace user
other
withdata
(#2258) isTraceSampling
is now on by default.tracingOrigins
has been replaced bytracePropagationTargets
(#2255)
- Server-Side Dynamic Sampling Context support (#2226)
- Fix ConcurrentModificationException due to FrameMetricsAggregator manipulation (#2282)
- Fix slow and frozen frames tracking (#2271)
- Fixed AbstractMethodError when getting Lifecycle (#2228)
- Missing unit fields for Android measurements (#2204)
- Avoid sending empty profiles (#2232)
- Fix file descriptor leak in FileIO instrumentation (#2248)
- Fix memory leak caused by throwableToSpan (#2227)
- make profiling rate defaults to 101 hz (#2211)
- SentryOptions.setProfilingTracesIntervalMillis has been deprecated
- Added cpu architecture and default environment in profiles envelope (#2207)
- SentryOptions.setProfilingEnabled has been deprecated in favor of setProfilesSampleRate
- Use toString for enum serialization (#2220)
- Concurrent profiling 3 - added truncation reason (#2247)
- Concurrent profiling 2 - added list of transactions (#2218)
- Concurrent profiling 1 - added envelope payload data format (#2216)
- Send source for transactions (#2180)
- Add profilesSampleRate and profileSampler options for Android sdk (#2184)
- Add baggage header to RestTemplate (#2206)
- Bump Native SDK from v0.4.18 to v0.5.0 (#2199)
- Bump Gradle from v7.5.0 to v7.5.1 (#2212)
- Prevent NPE by checking SentryTracer.timer for null again inside synchronized (#2200)
- Weakly reference Activity for transaction finished callback (#2203)
attach-screenshot
set on Manual init. didn't work (#2186)- Remove extra space from
spring.factories
causing issues in old versions of Spring Boot (#2181)
- Switch upstream dependencies to
compileOnly
in integrations (#2175)
- Lazily retrieve HostnameCache in MainEventProcessor (#2170)
- Only send userid in Dynamic Sampling Context if sendDefaultPii is true (#2147)
- Remove userId from baggage due to PII (#2157)
- Add integration for Apollo-Kotlin 3 (#2109)
- New package
sentry-android-navigation
for AndroidX Navigation support (#2136) - New package
sentry-compose
for Jetpack Compose support (Navigation) (#2136) - Add sample rate to baggage as well as trace in envelope header and flatten user (#2135)
Breaking Changes:
- The boolean parameter
samplingDecision
in theTransactionContext
constructor has been replaced with aTracesSamplingDecision
object. Feel free to ignore the@ApiStatus.Internal
in this case.
- Filter out app starts with more than 60s (#2127)
- Fix thread leak due to Timer being created and never cancelled (#2131)
- Swallow error when reading ActivityManager#getProcessesInErrorState instead of crashing (#2114)
- Use charset string directly as StandardCharsets is not available on earlier Android versions (#2111)
- Replace
tracestate
header withbaggage
header (#2078) - Allow opting out of device info collection that requires Inter-Process Communication (IPC) (#2100)
- Implement local scope by adding overloads to the capture methods that accept a ScopeCallback (#2084)
- SentryOptions#merge is now public and can be used to load ExternalOptions (#2088)
- Fix proguard rules to work R8 issue around on AGP 7.3.0-betaX and 7.4.0-alphaX (#2094)
- Fix GraalVM Native Image compatibility (#2172)
- Starting with version
6.0.0
of thesentry
package, Sentry's self hosted version >= v21.9.0 is required or you have to manually disable sending client reports via thesendClientReports
option. This only applies to self-hosted Sentry. If you are using sentry.io, no action is needed.
- Allow optimization and obfuscation of the SDK by reducing proguard rules (#2031)
- Relax TransactionNameProvider (#1861)
- Use float instead of Date for protocol types for higher precision (#1737)
- Allow setting SDK info (name & version) in manifest (#2016)
- Allow setting native Android SDK name during build (#2035)
- Include application permissions in Android events (#2018)
- Automatically create transactions for UI events (#1975)
- Hints are now used via a Hint object and passed into beforeSend and EventProcessor as @NotNull Hint object (#2045)
- Attachments can be manipulated via hint (#2046)
- Add sentry-servlet-jakarta module (#1987)
- Add client reports (#1982)
- Screenshot is taken when there is an error (#1967)
- Add Android profiling traces (#1897) (#1959) and its tests (#1949)
- Enable enableScopeSync by default for Android (#1928)
- Feat: Vendor JSON (#1554)
- Introduce
JsonSerializable
andJsonDeserializer
interfaces for manual json serialization/deserialization. - Introduce
JsonUnknwon
interface to preserve unknown properties when deserializing/serializing SDK classes. - When passing custom objects, for example in
Contexts
, these are supported for serialization:JsonSerializable
Map
,Collection
,Array
,String
and all primitive types.- Objects with the help of refection.
Map
,Collection
,Array
,String
and all primitive types.- Call
toString()
on objects that have a cyclic reference to a ancestor object. - Call
toString()
where object graphs exceed max depth.
- Remove
gson
dependency. - Remove
IUnknownPropertiesConsumer
- Introduce
- Pass MDC tags as Sentry tags (#1954)
- Calling Sentry.init and specifying contextTags now has an effect on the Logback SentryAppender (#2052)
- Calling Sentry.init and specifying contextTags now has an effect on the Log4j SentryAppender (#2054)
- Calling Sentry.init and specifying contextTags now has an effect on the jul SentryAppender (#2057)
- Update Spring Boot dependency to 2.6.8 and fix the CVE-2022-22970 (#2068)
- Sentry can now self heal after a Thread had its currentHub set to a NoOpHub (#2076)
- No longer close OutputStream that is passed into JsonSerializer (#2029)
- Fix setting context tags on events captured by Spring (#2060)
- Isolate cached events with hashed DSN subfolder (#2038)
- SentryThread.current flag will not be overridden by DefaultAndroidEventProcessor if already set (#2050)
- Fix serialization of Long inside of Request.data (#2051)
- Update sentry-native to 0.4.17 (#2033)
- Update Gradle to 7.4.2 and AGP to 7.2 (#2042)
- Change order of event filtering mechanisms (#2001)
- Only send session update for dropped events if state changed (#2002)
- Android profiling initializes on first profile start (#2009)
- Profiling rate decreased from 300hz to 100hz (#1997)
- Allow disabling sending of client reports via Android Manifest and external options (#2007)
- Ref: Upgrade Spring Boot dependency to 2.5.13 (#2011)
- Ref: Make options.printUncaughtStackTrace primitive type (#1995)
- Ref: Remove not needed interface abstractions on Android (#1953)
- Ref: Make hints Map<String, Object> instead of only Object (#1929)
- Ref: Simplify DateUtils with ISO8601Utils (#1837)
- Ref: Remove deprecated and scheduled fields (#1875)
- Ref: Add shutdownTimeoutMillis in favor of shutdownTimeout (#1873)
- Ref: Remove Attachment ContentType since the Server infers it (#1874)
- Ref: Bind external properties to a dedicated class. (#1750)
- Ref: Debug log serializable objects (#1795)
- Ref: catch Throwable instead of Exception to suppress internal SDK errors (#1812)
SentryOptions
can merge properties fromExternalOptions
instead of another instance ofSentryOptions
- Following boolean properties from
SentryOptions
that allowednull
values are now not nullable -debug
,enableUncaughtExceptionHandler
,enableDeduplication
SentryOptions
cannot be created anymore usingPropertiesProvider
withSentryOptions#from
method. UseExternalOptions#from
instead and merge created object withSentryOptions#merge
- Bump: Kotlin to 1.5 and compatibility to 1.4 for sentry-android-timber (#1815)
- Change order of event filtering mechanisms and only send session update for dropped events if session state changed (#2028)
- Sentry Timber integration throws an exception when using args (#1986)
- Bring back support for
Timber.tag
(#1974)
- Sentry Timber integration does not submit msg.formatted breadcrumbs (#1957)
- ANR WatchDog won't crash on SecurityException (#1962)
- Automatically enable
Timber
andFragment
integrations if they are present on the classpath (#1936)
- If transaction or span is finished, do not allow to mutate (#1940)
- Keep used AndroidX classes from obfuscation (Fixes UI breadcrumbs and Slow/Frozen frames) (#1942)
- Ref: Make ActivityFramesTracker public to be used by Hybrid SDKs (#1931)
- Bump: AGP to 7.1.2 (#1930)
- NPE while adding "response_body_size" breadcrumb, when response body length is unknown (#1908)
- Do not include stacktrace frames into Timber message (#1898)
- Potential memory leaks (#1909)
Breaking changes:
Timber.tag
is no longer supported by our Timber integration and will not appear on Sentry for error events.
Please vote on this issue, if you'd like us to provide support for that.
- NPE while adding "response_body_size" breadcrumb, when response body length is unknown (#1908)
Breaking changes:
Timber.tag
is no longer supported by our Timber integration and will not appear on Sentry for error events.
Please vote on this issue, if you'd like us to provide support for that.
- Add options.printUncaughtStackTrace to print uncaught exceptions (#1890)
- NPE while adding "response_body_size" breadcrumb, when response body is null (#1884)
- Bump: AGP to 7.1.0 (#1892)
- Add breadcrumbs support for UI events (automatically captured) (#1876)
- Change scope of servlet-api to compileOnly (#1880)
- Do not create SentryExceptionResolver bean when Spring MVC is not on the classpath (#1865)
- Detect App Cold start correctly for Hybrid SDKs (#1855)
- Bump: log4j to 2.17.0 (#1852)
- Bump: logback to 1.2.9 (#1853)
- Add locale to device context and deprecate language (#1832)
- Add
SentryFileInputStream
andSentryFileOutputStream
for File I/O performance instrumentation (#1826) - Add
SentryFileReader
andSentryFileWriter
for File I/O instrumentation (#1843)
- Bump: log4j to 2.15.0 (#1839)
- Ref: Rename Fragment span operation from
ui.fragment.load
toui.load
(#1824) - Ref: change
java.util.Random
tojava.security.SecureRandom
for possible security reasons (#1831)
- Only report App start measurement for full launch on Android (#1821)
- Ref: catch Throwable instead of Exception to suppress internal SDK errors (#1812)
- Refactor OkHttp and Apollo to Kotlin functional interfaces (#1797)
- Add secondary constructor to SentryInstrumentation (#1804)
- Do not start fragment span if not added to the Activity (#1813)
- Add
graphql-java
instrumentation (#1777)
- Do not crash when event processors throw a lower level Throwable class (#1800)
- ActivityFramesTracker does not throw if Activity has no observers (#1799)
- Add datasource tracing with P6Spy (#1784)
- ActivityFramesTracker does not throw if Activity has not been added (#1782)
- PerformanceAndroidEventProcessor uses up to date isTracingEnabled set on Configuration callback (#1786)
- Window.FEATURE_NO_TITLE does not work when using activity traces (#1769)
- unregister UncaughtExceptionHandler on close (#1770)
- Make ActivityFramesTracker operations thread-safe (#1762)
- Clone Scope Contexts (#1763)
- Bump: AGP to 7.0.3 (#1765)
- Close HostnameCache#executorService on SentryClient#close (#1757)
- Add isCrashedLastRun support (#1739)
- Attach Java vendor and version to events and transactions (#1703)
- Handle exception if Context.registerReceiver throws (#1747)
- Allow setting proguard via Options and/or external resources (#1728)
- Add breadcrumbs for the Apollo integration (#1726)
- Don't set lastEventId for transactions (#1727)
- ActivityLifecycleIntegration#appStartSpan memory leak (#1732)
- Add "data" to spans (#1717)
- Check at runtime if AndroidX.Core is available (#1718)
- Should not capture unfinished transaction (#1719)
- Add tracestate HTTP header support (#1683)
- Add option to filter which origins receive tracing headers (#1698)
- Include unfinished spans in transaction (#1699)
- Add static helpers for creating breadcrumbs (#1702)
- Performance support for Android Apollo (#1705)
- Move tags from transaction.contexts.trace.tags to transaction.tags (#1700)
Breaking changes:
- Updated proguard keep rule for enums, which affects consumer application code (#1694)
- Servlet 3.1 compatibility issue (#1681)
- Do not drop Contexts key if Collection, Array or Char (#1680)
- Add support for async methods in Spring MVC (#1652)
- Add secondary constructor taking IHub to SentryOkHttpInterceptor (#1657)
- Merge external map properties (#1656)
- Remove onActivityPreCreated call in favor of onActivityCreated (#1661)
- Do not crash if SENSOR_SERVICE throws (#1655)
- Make sure scope is popped when processing request results in exception (#1665)
- Spring WebClient integration (#1621)
- OpenFeign integration (#1632)
- Add more convenient way to pass BeforeSpanCallback in OpenFeign integration (#1637)
- Bump: sentry-native to 0.4.12 (#1651)
- No documented changes.
- Generate Sentry BOM (#1486)
- Slow/Frozen frames metrics (#1609)
- Add request body extraction for Spring MVC integration (#1595)
- set min sdk version of sentry-android-fragment to API 14 (#1608)
- Ser/Deser of the UserFeedback from cached envelope (#1611)
- Make SentryAppender non-final for Log4j2 and Logback (#1603)
- Do not throw IAE when tracing header contain invalid trace id (#1605)
- Update sentry-native to 0.4.11 (#1591)
- Spring Webflux integration (#1529)
- Support transaction waiting for children to finish. (#1535)
- Capture logged marker in log4j2 and logback appenders (#1551)
- Allow clearing of attachments in the scope (#1562)
- Set mechanism type in SentryExceptionResolver (#1556)
- Perf. for fragments (#1528)
- Handling missing Spring Security on classpath on Java 8 (#1552)
- Use a different method to get strings from JNI, and avoid excessive Stack Space usage. (#1214)
- Add data field to SentrySpan (#1555)
- Clock drift issue when calling DateUtils#getDateTimeWithMillisPrecision (#1557)
- Prefer snake case for HTTP integration data keys (#1559)
- Assign lastEventId only if event was queued for submission (#1565)
- Sources and Javadoc artifacts were mixed up (#1515)
This release brings many improvements but also new features:
- OkHttp Interceptor for Android (#1330)
- GraalVM Native Image Compatibility (#1329)
- Add option to ignore exceptions by type (#1352)
- Enrich transactions with device contexts (#1430) (#1469)
- Better interoperability with Kotlin null-safety (#1439) and (#1462)
- Add coroutines support (#1479)
- OkHttp callback for Customising the Span (#1478)
- Add breadcrumb in Spring RestTemplate integration (#1481)
Breaking changes:
Other fixes:
- Fix: Add attachmentType to envelope ser/deser. (#1504)
Thank you:
- @maciejwalkowiak for coding most of it.
- Ref: Deprecate SentryBaseEvent#getOriginThrowable and add SentryBaseEvent#getThrowableMechanism (#1502)
- Graceful Shutdown flushes event instead of Closing SDK (#1500)
- Do not append threads that come from the EnvelopeFileObserver (#1501)
- Ref: Deprecate cacheDirSize and add maxCacheItems (#1499)
- Append all threads if Hint is Cached but attachThreads is enabled (#1503)
- Add secondary constructor to SentryOkHttpInterceptor (#1491)
- Add option to enable debug mode in Log4j2 integration (#1492)
- Ref: Replace clone() with copy constructor (#1496)
- OkHttp callback for Customising the Span (#1478)
- Add breadcrumb in Spring RestTemplate integration (#1481)
- Add coroutines support (#1479)
- Cloning Stack (#1483)
- Handling immutable collections on SentryEvent and protocol objects (#1468)
- Associate event with transaction when thrown exception is not a direct cause (#1463)
- Ref: nullability annotations to Sentry module (#1439) and (#1462)
- NPE when adding Context Data with null values for log4j2 (#1465)
- sentry-android-timber package sets sentry.java.android.timber as SDK name (#1456)
- When AppLifecycleIntegration is closed, it should remove observer using UI thread (#1459)
- Bump: AGP to 4.2.0 (#1460)
Breaking Changes:
- Remove: Settings.Secure.ANDROID_ID in favor of generated installationId (#1455)
- Rename: enableSessionTracking to enableAutoSessionTracking (#1457)
- Ref: Refactor converting HttpServletRequest to Sentry Request in Spring integration (#1387)
- Bump: sentry-native to 0.4.9 (#1431)
- Activity tracing auto instrumentation for Android API < 29 (#1402)
- use connection and read timeouts in ApacheHttpClient based transport (#1397)
- set correct transaction status for unhandled exceptions in SentryTracingFilter (#1406)
- handle network errors in SentrySpanClientHttpRequestInterceptor (#1407)
- set scope on transaction (#1409)
- set status and associate events with transactions (#1426)
- Do not set free memory and is low memory fields when it's a NDK hard crash (#1399)
- Apply user from the scope to transaction (#1424)
- Pass maxBreadcrumbs config. to sentry-native (#1425)
- Run event processors and enrich transactions with contexts (#1430)
- Set Span status for OkHttp integration (#1447)
- Set user on transaction in Spring & Spring Boot integrations (#1443)
- Add option to ignore exceptions by type (#1352)
- Sentry closes Android NDK and ShutdownHook integrations (#1358)
- Allow inheritance of SentryHandler class in sentry-jul package(#1367)
- Make NoOpHub public (#1379)
- Configure max spans per transaction (#1394)
- Bump: Upgrade Apache HttpComponents Core to 5.0.3 (#1375)
- NPE when MDC contains null values (sentry-logback) (#1364)
- Avoid NPE when MDC contains null values (sentry-jul) (#1385)
- Accept only non null value maps (#1368)
- Do not bind transactions to scope by default. (#1376)
- Hub thread safety (#1388)
- SentryTransactionAdvice should operate on the new scope (#1389)
- Add an overload for
startTransaction
that sets the created transaction to the Scope (#1313) - Set SDK version on Transactions (#1307)
- GraalVM Native Image Compatibility (#1329)
- Add OkHttp client application interceptor (#1330)
- Bump: sentry-native to 0.4.8
- Ref: Separate user facing and protocol classes in the Performance feature (#1304)
- Use logger set on SentryOptions in GsonSerializer (#1308)
- Use the bindToScope correctly
- Allow 0.0 to be set on tracesSampleRate (#1328)
- set "java" platform to transactions (#1332)
- Allow disabling tracing through SentryOptions (#1337)
- Activity tracing auto instrumentation
- Aetting in-app-includes from external properties (#1291)
- Initialize Sentry in Logback appender when DSN is not set in XML config (#1296)
- JUL integration SDK name (#1293)
- Improve EventProcessor nullability annotations (#1229).
- Add ability to flush events synchronously.
- Support @SentrySpan and @SentryTransaction on classes and interfaces. (#1243)
- Do not serialize empty collections and maps (#1245)
- Integration interface better compatibility with Kotlin null-safety
- Simplify Sentry configuration in Spring integration (#1259)
- Simplify configuring Logback integration when environment variable with the DSN is not set (#1271)
- Add Request to the Scope. #1270)
- Optimize SentryTracingFilter when hub is disabled.
- Bump: sentry-native to 0.4.7
- Optimize DuplicateEventDetectionEventProcessor performance (#1247).
- Prefix sdk.package names with io.sentry (#1249)
- Remove experimental annotation for Attachment (#1257)
- Mark stacktrace as snapshot if captured at arbitrary moment (#1231)
- Disable Gson HTML escaping
- Make the ANR Atomic flags immutable
- Prevent NoOpHub from creating heavy SentryOptions objects (#1272)
- SentryTransaction#getStatus NPE (#1273)
- Discard unfinished Spans before sending them over to Sentry (#1279)
- Interrupt the thread in QueuedThreadPoolExecutor (#1276)
- SentryTransaction#finish should not clear another transaction from the scope (#1278)
Breaking Changes:
- Enchancement: SentryExceptionResolver should not send handled errors by default (#1248).
- Ref: Simplify RestTemplate instrumentation (#1246)
- Enchancement: Add overloads for startTransaction taking op and description (#1244)
This release brings the Sentry Performance feature to Java SDK, Spring, Spring Boot, and Android integrations. Read more in the reference documentation:
- Improved loading external configuration:
- Load
sentry.properties
from the application's current working directory (#1046) - Resolve
in-app-includes
,in-app-excludes
,tags
,debug
,uncaught.handler.enabled
parameters from the external configuration
- Load
- Set global tags on SentryOptions and load them from external configuration (#1066)
- Add support for attachments (#1082)
- Resolve
servername
from the localhost address - Simplified transport configuration through setting
TransportFactory
instead ofITransport
on SentryOptions (#1124)
- Add the ability to register multiple
OptionsConfiguration
beans (#1093) - Initialize Logback after context refreshes (#1129)
- Add
isSideLoaded
andinstallerStore
tags automatically (Where your App. was installed from eg Google Play, Amazon Store, downloaded APK, etc...) - Bump: sentry-native to 0.4.6
- Bump: Gradle to 6.8.1 and AGP to 4.1.2
- Add addToTransactions to Attachment (#1191)
- Support SENTRY_TRACES_SAMPLE_RATE conf. via env variables (#1171)
- Pass request to CustomSamplingContext in Spring integration (#1172)
- Move
SentrySpanClientHttpRequestInterceptor
to Spring module (#1181) - Add overload for
transaction/span.finish(SpanStatus)
(#1182) - Simplify registering traces sample callback in Spring integration (#1184)
- Polish Performance API (#1165)
- Set "debug" through external properties (#1186)
- Simplify Spring integration (#1188)
- Init overload with dsn (#1195)
- Enable Kotlin map-like access on CustomSamplingContext (#1192)
- Auto register custom ITransportFactory in Spring integration (#1194)
- Improve Kotlin property access in Performance API (#1193)
- Copy options tags to transactions (#1198)
- Add convenient method for accessing event's throwable (#1202)
- Ref: Set SpanContext on SentryTransaction to avoid potential NPE (#1173)
- Free Local Refs manually due to Android local ref. count limits
- Bring back support for setting transaction name without ongoing transaction (#1183)
- Improve ITransaction and ISpan null-safety compatibility (#1161)
- Automatically assign span context to captured events (#1156)
- Autoconfigure Apache HttpClient 5 based Transport in Spring Boot integration (#1143)
- Send user.ip_address = {{auto}} when sendDefaultPii is true (#1015)
- Read tracesSampleRate from AndroidManifest
- OutboxSender supports all envelope item types (#1158)
- Read
uncaught.handler.enabled
property from the external configuration - Resolve servername from the localhost address
- Add maxAttachmentSize to SentryOptions (#1138)
- Drop invalid attachments (#1134)
- Set isSideLoaded info tags
- Add non blocking Apache HttpClient 5 based Transport (#1136)
- Ref: Make Attachment immutable (#1120)
- Ref: using Calendar to generate Dates
- Ref: Return NoOpTransaction instead of null (#1126)
- Ref:
ITransport
implementations are now responsible for executing request in asynchronous or synchronous way (#1118) - Ref: Add option to set
TransportFactory
instead ofITransport
onSentryOptions
(#1124) - Ref: Simplify ITransport creation in ITransportFactory (#1135)
- Fixes and Tests: Session serialization and deserialization
- Inheriting sampling decision from parent (#1100)
- Exception only sets a stack trace if there are frames
- Initialize Logback after context refreshes (#1129)
- Do not crash when passing null values to @Nullable methods, eg User and Scope
- Resolving dashed properties from external configuration
- Consider {{ auto }} as a default ip address (#1015)
- Set release and environment on Transactions (#1152)
- Do not set transaction on the scope automatically
- Add basic support for attachments (#1082)
- Set transaction name on events and transactions sent using Spring integration (#1067)
- Set global tags on SentryOptions and load them from external configuration (#1066)
- Add API validator and remove deprecated methods
- Add more convenient method to start a child span (#1073)
- Autoconfigure traces callback in Spring Boot integration (#1074)
- Resolve in-app-includes and in-app-excludes parameters from the external configuration
- Make InAppIncludesResolver public (#1084)
- Add the ability to register multiple OptionsConfiguration beans (#1093)
- Database query tracing with datasource-proxy (#1095)
- Ref: Refactor resolving SpanContext for Throwable (#1068)
- Ref: Change "op" to "operation" in @SentrySpan and @SentryTransaction
- Remove method reference in SentryEnvelopeItem (#1091)
- Set current thread only if there are no exceptions
- SentryOptions creates GsonSerializer by default
- Append DebugImage list if event already has it
- Sort breadcrumbs by Date if there are breadcrumbs already in the event
- Load
sentry.properties
from the application's current working directory (#1046) - Performance monitoring (#971)
- Performance monitoring for Spring Boot applications (#971)
- Ref: Refactor JSON deserialization (#1047)
- Set current thread only if theres no exceptions (#1064)
- Append DebugImage list if event already has it (#1092)
- Sort breadcrumbs by Date if there are breadcrumbs already in the event (#1094)
- Free Local Refs manually due to Android local ref. count limits (#1179)
- Expose a Module (Debug images) Loader for Android thru sentry-native (#1043)
- Added java doc to protocol classes based on sentry-data-schemes project (#1045)
- Make SentryExceptionResolver Order configurable to not send handled web exceptions (#1008)
- Resolve HTTP Proxy parameters from the external configuration (#1028)
- Sentry NDK integration is compiled against default NDK version based on AGP's version (#1048)
- Bump: AGP 4.1.1 (#1040)
- Update to sentry-native 0.4.4 and fix shared library builds (#1039)
- use neutral Locale for String operations (#1033)
- Clean up JNI code and properly free strings (#1050)
- set userId for hard-crashes if no user is set (#1049)
- Fix broken NDK integration on 3.1.2 (release failed on packaging a .so file)
- Increase max cached events to 30 (#1029)
- Normalize DSN URI (#1030)
- Manually capturing User Feedback
- Set environment to "production" by default.
- Make public the Breadcrumb constructor that accepts a Date (#1012)
- ref: Validate event id on user feedback submission
- Bind logging related SentryProperties to Slf4j Level instead of Logback to improve Log4j2 compatibility
- Prevent Logback and Log4j2 integrations from re-initializing Sentry when Sentry is already initialized
- Make sure HttpServletRequestSentryUserProvider runs by default before custom SentryUserProvider beans
- Fix setting up Sentry in Spring Webflux annotation by changing the scope of Spring WebMvc related dependencies
- Make getThrowable public and improve set contexts (#967)
- Accepted quoted values in properties from external configuration (#972)
- Auto-Configure
inAppIncludes
in Spring Boot integration (#966) - Bump: Android Gradle Plugin 4.0.2 (#968)
- Don't require
sentry.dsn
to be set when usingio.sentry:sentry-spring-boot-starter
andio.sentry:sentry-logback
together (#965) - Remove chunked streaming mode (#974)
- Android 11 + targetSdkVersion 30 crashes Sentry on start (#977)
This release marks the re-unification of Java and Android SDK code bases. It's based on the Android 2.0 SDK, which implements Sentry's unified API.
Considerable changes were done, which include a lot of improvements. More are covered below, but the highlights are:
- Improved
log4j2
integration- Capture breadcrumbs for level INFO and higher
- Raises event for ERROR and higher.
- Minimum levels are configurable.
- Optionally initializes the SDK via appender.xml
- Dropped support to
log4j
. - Improved
logback
integration- Capture breadcrumbs for level INFO and higher
- Raises event for ERROR and higher.
- Minimum levels are configurable.
- Optionally initializes the SDK via appender.xml
- Configurable via Spring integration if both are enabled
- Spring
- No more duplicate events with Spring and logback
- Auto initalizes if DSN is available
- Configuration options available with auto complete
- Google App Engine support dropped
- Callback to validate SSL certificate (#944)
- Attach stack traces enabled by default
- Release health enabled by default for Android
- Sync of Scopes for Java -> Native (NDK)
- Bump Sentry-Native v0.4.2
- Android 11 Support
- Unified API for Java SDK and integrations (Spring, Spring boot starter, Servlet, Logback, Log4j2)
New Java docs are live and being improved.
Packages were released on bintray sentry-java
, bintray sentry-android
, jcenter
and mavenCentral
The previous Java releases, are all available in this repository through the tagged releases.
- feat: ssl support (#944) @ninekaw9 @marandaneto
- feat: sync Java to C (#937) @bruno-garcia @marandaneto
- feat: Auto-configure Logback appender in Spring Boot integration. (#938) @maciejwalkowiak
- feat: Add Servlet integration. (#935) @maciejwalkowiak
- fix: Pop scope at the end of the request in Spring integration. (#936) @maciejwalkowiak
- bump: Upgrade Spring Boot to 2.3.4. (#932) @maciejwalkowiak
- fix: Do not set cookies when send pii is set to false. (#931) @maciejwalkowiak
Packages were released on bintray sentry-java
, bintray sentry-android
, jcenter
and mavenCentral
We'd love to get feedback.
- Enable attach stack traces and disable attach threads by default (#921) @marandaneto
- Bump sentry-native to 0.4.2 (#926) @marandaneto
- ref: remove log level as RN do not use it anymore (#924) @marandaneto
- Read sample rate correctly from manifest meta data (#923) @marandaneto
Packages were released on bintray sentry-android
and bintray sentry-java
We'd love to get feedback.
TBD
Packages were released on bintray
Note: This release marks the unification of the Java and Android Sentry codebases based on the core of the Android SDK (version 2.x). Previous releases for the Android SDK (version 2.x) can be found on the now archived: https://github.com/getsentry/sentry-android/
https://github.com/getsentry/sentry-java
- feat: enable release health by default
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Add main thread checker for the app lifecycle integration (#525) @marandaneto
- Set correct migration link (#523) @fupduck
- Warn about Sentry re-initialization. (#521) @maciejwalkowiak
- Set SDK version in
MainEventProcessor
. (#513) @maciejwalkowiak - Bump sentry-native to 0.4.0 (#512) @marandaneto
- Bump Gradle to 6.6 and fix linting issues (#510) @marandaneto
- fix(sentry-java): Contexts belong on the Scope (#504) @maciejwalkowiak
- Add tests for verifying scope changes thread isolation (#508) @maciejwalkowiak
- Set
SdkVersion
in defaultSentryOptions
created in sentry-core module (#506) @maciejwalkowiak
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Add console application sample. (#502) @maciejwalkowiak
- Log stacktraces in SystemOutLogger (#498) @maciejwalkowiak
- Add method to add breadcrumb with string parameter. (#501) @maciejwalkowiak
- Converting UTC and ISO timestamp when missing Locale/TimeZone do not error (#505) @marandaneto
- Call
Sentry#close
on JVM shutdown. (#497) @maciejwalkowiak - ref: sentry-core changes for console app (#473) @marandaneto
Obs: If you are using its own instance of Hub
/SentryClient
and reflection to set up the SDK to be usable within Libraries, this change may break your code, please fix the renamed classes.
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Add sdk to envelope header (#488) @marandaneto
- Log request if response code is not 200 (#484) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Timber adds breadcrumb even if event level is < minEventLevel (#480) @marandaneto
- Contexts serializer avoids reflection and fixes desugaring issue (#478) @marandaneto
- clone session before sending to the transport (#474) @marandaneto
- Bump Gradle 6.5.1 (#479) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
-
Negative session sequence if the date is before java date epoch (#471) @marandaneto
-
Deserialise unmapped contexts values from envelope (#470) @marandaneto
-
Bump: sentry-native 0.3.4 (#468) @marandaneto
-
feat: timber integration (#464) @marandaneto
-
To add integrations it requires a manual initialization of the Android SDK.
-
Add the
sentry-android-timber
dependency:
implementation 'io.sentry:sentry-android-timber:{version}' // version >= 2.2.0
- Initialize and add the
SentryTimberIntegration
:
SentryAndroid.init(this, options -> {
// default values:
// minEventLevel = ERROR
// minBreadcrumbLevel = INFO
options.addIntegration(new SentryTimberIntegration());
// custom values for minEventLevel and minBreadcrumbLevel
// options.addIntegration(new SentryTimberIntegration(SentryLevel.WARNING, SentryLevel.ERROR));
});
- Use the Timber integration:
try {
int x = 1 / 0;
} catch (Exception e) {
Timber.e(e);
}
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Init native libs if available on SDK init (#461) @marandaneto
- Make JVM target explicit in sentry-core (#462) @dilbernd
- Timestamp with millis from react-native should be in UTC format (#456) @marandaneto
- Bump Gradle to 6.5 (#454) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Do not lookup sentry-debug-meta but instead load it directly (#445) @marandaneto
- Regression on v2.1.5 which can cause a crash on SDK init
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
This version has a severe bug and can cause a crash on SDK init
Please upgrade to https://github.com/getsentry/sentry-android/releases/tag/2.1.6
- Make gzip as default content encoding type (#433) @marandaneto
- Use AGP 4 features (#366) @marandaneto
- Create GH Actions CI for Ubuntu/macOS (#403) @marandaneto
- Make root checker better and minimize false positive (#417) @marandaneto
- bump: sentry-native to 0.3.1 (#440) @marandaneto
- Update last session timestamp (#437) @marandaneto
- Filter trim memory breadcrumbs (#431) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
This fixes several critical bugs in sentry-android 2.0 and 2.1
- Sentry.init register integrations after creating the main Hub instead of doing it in the main Hub ctor (#427) @marandaneto
- make NoOpLogger public (#425) @marandaneto
- ConnectivityChecker returns connection status and events are not trying to be sent if no connection. (#420) @marandaneto
- thread pool executor is a single thread executor instead of scheduled thread executor (#422) @marandaneto
- Add Abnormal to the Session.State enum as its part of the protocol (#424) @marandaneto
- Bump: Gradle to 6.4.1 (#419) @marandaneto
We recommend that you use sentry-android 2.1.3 over the initial release of sentry-android 2.0 and 2.1.
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Added options to configure http transport (#411) @marandaneto
- Phone state breadcrumbs require read_phone_state on older OS versions (#415) @marandaneto @bsergean
- before raising ANR events, we check ProcessErrorStateInfo if available (#412) @marandaneto
- send cached events to use a single thread executor (#405) @marandaneto
- initing SDK on AttachBaseContext (#409) @marandaneto
- sessions can't be abnormal, but exited if not ended properly (#410) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Added missing getters on Breadcrumb and SentryEvent (#397) @marandaneto
- Add trim memory breadcrumbs (#395) @marandaneto
- Only set breadcrumb extras if not empty (#394) @marandaneto
- Added samples of how to disable automatic breadcrumbs (#389) @marandaneto
- Set missing release, environment and dist to sentry-native options (#404) @marandaneto
- Do not add automatic and empty sensor breadcrumbs (#401) @marandaneto
- ref: removed Thread.sleep from LifecycleWatcher tests, using awaitility and DateProvider (#392) @marandaneto
- ref: added a DateTimeProvider for making retry after testable (#391) @marandaneto
- Bump Gradle to 6.4 (#390) @marandaneto
- Bump sentry-native to 0.2.6 (#396) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Includes all the changes of 2.1.0 alpha, beta and RC
- fix when PhoneStateListener is not ready for use (#387) @marandaneto
- make ANR 5s by default (#388) @marandaneto
- rate limiting by categories (#381) @marandaneto
- Bump NDK to latest stable version 21.1.6352462 (#386) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- patch from 2.1.0-alpha.2 - avoid crash if NDK throws UnsatisfiedLinkError (#344) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Options for uncaught exception and make SentryOptions list Thread-Safe (#384) @marandaneto
- Automatic breadcrumbs for app, activity and sessions lifecycles and system events (#348) @marandaneto
- Make capture session and envelope internal (#372) @marandaneto
- If retry after header has empty categories, apply retry after to all of them (#377) @marandaneto
- Discard events and envelopes if cached and retry after (#378) @marandaneto
- Merge loadLibrary calls for sentry-native and clean up CMake files (#373) @Swatinem
- Exceptions should be sorted oldest to newest (#370) @marandaneto
- Check external storage size even if its read only (#368) @marandaneto
- Wrong check for cellular network capability (#369) @marandaneto
- add ScheduledForRemoval annotation to deprecated methods (#375) @marandaneto
- Bump NDK to 21.0.6113669 (#367) @marandaneto
- Bump AGP and add new make cmd to check for updates (#365) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Bump sentry-native to 0.2.4 (#364) @marandaneto
- Update current session on session start after deleting previous session (#362) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Bump sentry-native to 0.2.3 (#357) @marandaneto
- Check for androidx availability on runtime (#356) @marandaneto
- If theres a left over session file and its crashed, we should not overwrite its state (#354) @marandaneto
- Session should be exited state if state was ok (#352) @marandaneto
- Envelope has dedicated endpoint (#353) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
- Change integration order for cached outbox events (#347) @marandaneto
- Avoid crash if NDK throws UnsatisfiedLinkError (#344) @marandaneto
- Avoid getting a threadlocal twice. (#339) @metlos
- Removing session tracking guard on hub and client (#338) @marandaneto
- Bump agp to 3.6.2 (#336) @marandaneto
- Fix racey ANR integration (#332) @marandaneto
- Logging envelopes path when possible instead of nullable id (#331) @marandaneto
- Renaming transport gate method (#330) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
Release of Sentry's new SDK for Android.
- Release health @marandaneto @bruno-garcia
- ANR report should have 'was active=yes' on the dashboard (#299) @marandaneto
- NDK events apply scoped data (#322) @marandaneto
- Add a StdoutTransport (#310) @mike-burns
- Implementing new retry after protocol (#306) @marandaneto
- Bump sentry-native to 0.2.2 (#305) @Swatinem
- Missing App's info (#315) @marandaneto
- Buffered writers/readers - otimizations (#311) @marandaneto
- Boot time should be UTC (#309) @marandaneto
- Make transport result public (#300) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
Release of Sentry's new SDK for Android.
- MavenCentral support (#284) @marandaneto
- Bump AGP to 3.6.1 (#285) @marandaneto
Packages were released on bintray
, jcenter
and mavenCentral
We'd love to get feedback.
Release of Sentry's new SDK for Android.
- Attach threads/stacktraces (#267) @marandaneto
- Add the default serverName to SentryOptions and use it in MainEventProcessor (#279) @metlos
- set current threadId when there's no mechanism set (#277) @marandaneto
- Preview package manager (#269) @bruno-garcia
Packages were released on bintray
, jcenter
We'd love to get feedback.
Release of Sentry's new SDK for Android.
New features not offered by (1.7.x):
- NDK support
- Captures crashes caused by native code
- Access to the
sentry-native
SDK API by your native (C/C++/Rust code/..).
- Automatic init (just add your
DSN
to the manifest)- Proguard rules are added automatically
- Permission (Internet) is added automatically
- Uncaught Exceptions might be captured even before the app restarts
- Sentry's Unified API.
- More context/device information
- Packaged as
aar
- Frames from the app automatically marked as
InApp=true
(stack traces in Sentry highlights them by default). - Complete Sentry Protocol available.
- All threads and their stack traces are captured.
- Sample project in this repo to test many features (segfault, uncaught exception, ANR...)
Features from the current SDK like ANR
are also available (by default triggered after 4 seconds).
Packages were released on bintray
, jcenter
We'd love to get feedback.
Release of Sentry's new SDK for Android.
- Take sampleRate from metadata (#262) @bruno-garcia
- Support mills timestamp format (#263) @marandaneto
- Adding logs to installed integrations (#265) @marandaneto
- Breacrumb.data to string,object, Add LOG level (#264) @HazAT
- Read release conf. on manifest (#266) @marandaneto
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.30
Release of Sentry's new SDK for Android.
- fixes (#259) - NPE check on getExternalFilesDirs items. (#260) @marandaneto
- strictMode typo (#258) @marandaneto
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.30
Release of Sentry's new SDK for Android.
- Hub mode configurable (#247) @bruno-garcia
- Added remove methods (tags/extras) to the sentry static class (#243) @marandaneto
- Update ndk for new sentry-native version (#235) @Swatinem @marandaneto
- Make integrations public (#256) @marandaneto
- Bump build-tools (#255) @marandaneto
- Added javadocs to scope and its dependencies (#253) @marandaneto
- Build all ABIs (#254) @marandaneto
- Moving back ANR timeout from long to int param. (#252) @marandaneto
- Added HubAdapter to call Sentry static methods from Integrations (#250) @marandaneto
- New Release format (#242) @marandaneto
- Javadocs for SentryOptions (#246) @marandaneto
- non-app is already inApp excluded by default. (#244) @marandaneto
- Fix if symlink exists for sentry-native (#241) @marandaneto
- Clone method - race condition free (#226) @marandaneto
- Refactoring breadcrumbs callback (#239) @marandaneto
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.30
Release of Sentry's new SDK for Android.
- Added remove methods for Scope data (#237) @marandaneto
- More device context (deviceId, connectionType and language) (#229) @marandaneto
- Added a few java docs (Sentry, Hub and SentryClient) (#223) @marandaneto
- Implemented diagnostic logger (#218) @marandaneto
- Added event processors to scope (#209) @marandaneto
- Added android transport gate (#206) @marandaneto
- Added executor for caching values out of the main thread (#201) @marandaneto
- Honor RetryAfter (#236) @marandaneto
- Add tests for SentryValues (#238) @philipphofmann
- Do not set frames if there's none (#234) @marandaneto
- Always call interrupt after InterruptedException (#232) @marandaneto
- Mark as current thread if its the main thread (#228) @marandaneto
- Fix lgtm alerts (#219) @marandaneto
- Written unit tests to ANR integration (#215) @marandaneto
- Added blog posts to README (#214) @marandaneto
- Raise code coverage for Dsn to 100% (#212) @philipphofmann
- Remove redundant times(1) for Mockito.verify (#211) @philipphofmann
- Transport may be set on options (#203) @marandaneto
- dist may be set on options (#204) @marandaneto
- Throw an exception if DSN is not set (#200) @marandaneto
- Migration guide markdown (#197) @marandaneto
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.29
Release of Sentry's new SDK for Android.
- fix Android bug on API 24 and 25 about getting current threads and stack traces (#194)
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.28
Release of Sentry's new SDK for Android.
- ref: ANR doesn't set handled flag (#186)
- SDK final review (#183)
- ref: Drop errored in favor of crashed (#187)
- Workaround android_id (#185)
- Renamed sampleRate (#191)
- Making timestamp package-private or test-only (#190)
- Split event processor in Device/App data (#180)
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.28
Release of Sentry's new SDK for Android.
- fix: DSN parsing (#165)
- Don't avoid exception type minification (#166)
- make Gson retro compatible with older versions of AGP (#177)
- Bump sentry-native with message object instead of a string (#172)
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.28
Release of Sentry's new SDK for Android.
- DebugId endianness (#162)
- Executed beforeBreadcrumb also for scope (#160)
- Benefit of manifest merging when minSdk (#159)
- Add method to captureMessage with level (#157)
- Listing assets file on the wrong dir (#156)
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.28
Third release of Sentry's new SDK for Android.
- Fixed release for jcenter and bintray
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.28
Second release of Sentry's new SDK for Android.
- Fixed a typo on pom generation.
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.28
First release of Sentry's new SDK for Android.
New features not offered by our current (1.7.x), stable SDK are:
- NDK support
- Captures crashes caused by native code
- Access to the
sentry-native
SDK API by your native (C/C++/Rust code/..).
- Automatic init (just add your
DSN
to the manifest)- Proguard rules are added automatically
- Permission (Internet) is added automatically
- Uncaught Exceptions might be captured even before the app restarts
- Unified API which include scopes etc.
- More context/device information
- Packaged as
aar
- Frames from the app automatically marked as
InApp=true
(stack traces in Sentry highlights them by default). - Complete Sentry Protocol available.
- All threads and their stack traces are captured.
- Sample project in this repo to test many features (segfault, uncaught exception, scope)
Features from the current SDK like ANR
are also available (by default triggered after 4 seconds).
Packages were released on bintray
, jcenter
We'd love to get feedback and we'll work in getting the GA 2.0.0
out soon.
Until then, the stable SDK offered by Sentry is at version 1.7.28