Releases: getsentry/sentry-rust
Releases · getsentry/sentry-rust
0.45.0
0.44.0
Breaking changes
- feat(log): support combined LogFilters and RecordMappings (#914) by @lcian
- Breaking change:
sentry::integrations::log::LogFilterhas been changed to abitflagsstruct. - It's now possible to map a
logrecord to multiple items in Sentry by combining multiple log filters in the filter, e.g.log::Level::ERROR => LogFilter::Event | LogFilter::Log. - If using a custom
mapperinstead, it's possible to return aVec<sentry::integrations::log::RecordMapping>to map alogrecord to multiple items in Sentry.
- Breaking change:
Behavioral changes
- ref(log): send logs by default when logs feature flag is enabled (#915) by @lcian
- If the
logsfeature flag is enabled, the default Sentryloglogger now sends logs for all events at or above INFO.
- If the
- ref(logs): enable logs by default if logs feature flag is used (#910) by @lcian
- This changes the default value of
sentry::ClientOptions::enable_logstotrue. - This simplifies the setup of Sentry structured logs by requiring users to just add the
logfeature flag to thesentrydependency to opt-in to sending logs. - When the
logfeature flag is enabled, thetracingandlogintegrations will send structured logs to Sentry for all logs/events at or above INFO level by default.
- This changes the default value of
0.43.0
Breaking changes
- ref(tracing): rework tracing to Sentry span name/op conversion (#887) by @lcian
- The
tracingintegration now uses the tracing span name as the Sentry span name by default. - Before this change, the span name would be set based on the
tracingspan target (<module>::<function>when using thetracing::instrumentmacro). - The
tracingintegration now uses<span target>::<span name>as the default Sentry span op (i.e.<module>::<function>when usingtracing::instrument). - Before this change, the span op would be set based on the
tracingspan name. - Read below to learn how to customize the span name and op.
- When upgrading, please ensure to adapt any queries, metrics or dashboards to use the new span names/ops.
- The
- ref(tracing): use standard code attributes (#899) by @lcian
- Logs now carry the attributes
code.module.name,code.file.pathandcode.line.numberstandardized in OTEL to surface the respective information, in contrast with the previously senttracing.module_path,tracing.fileandtracing.line.
- Logs now carry the attributes
- fix(actix): capture only server errors (#877) by @lcian
- The Actix integration now properly honors the
capture_server_errorsoption (enabled by default), capturing errors returned by middleware only if they are server errors (HTTP status code 5xx). - Previously, if a middleware were to process the request after the Sentry middleware and return an error, our middleware would always capture it and send it to Sentry, regardless if it was a client, server or some other kind of error.
- With this change, we capture errors returned by middleware only if those errors can be classified as server errors.
- There is no change in behavior when it comes to errors returned by services, in which case the Sentry middleware only captures server errors exclusively.
- The Actix integration now properly honors the
- fix: send trace origin correctly (#906) by @lcian
TraceContextnow has an additional fieldorigin, used to report which integration created a transaction.
Behavioral changes
- feat(tracing): send both breadcrumbs and logs by default (#878) by @lcian
- If the
logsfeature flag is enabled, andenable_logs: trueis set on your client options, the default Sentrytracinglayer now sends logs for all events at or above INFO.
- If the
Features
-
ref(tracing): rework tracing to Sentry span name/op conversion (#887) by @lcian
- Additional special fields have been added that allow overriding certain data on the Sentry span:
sentry.op: override the Sentry span op.sentry.name: override the Sentry span name.sentry.trace: given a string matching a validsentry-traceheader (sent automatically by client SDKs), continues the distributed trace instead of starting a new one. If the value is not a validsentry-traceheader or a trace is already started, this value is ignored.
sentry.opandsentry.namecan also be applied retroactively by declaring fields with valuetracing::field::Emptyand then recorded usingtracing::Span::record.- Example usage:
#[tracing::instrument(skip_all, fields( sentry.op = "http.server", sentry.name = "GET /payments", sentry.trace = headers.get("sentry-trace").unwrap_or(&"".to_owned()), ))] async fn handle_request(headers: std::collections::HashMap<String, String>) { // ... }
- Additional attributes are sent along with each span by default:
sentry.tracing.target: corresponds to thetracingspan'smetadata.target()code.module.name,code.file.path,code.line.number
- Additional special fields have been added that allow overriding certain data on the Sentry span:
-
feat(core): add Response context (#874) by @lcian
- The
Responsecontext can now be attached to events, to include information about HTTP responses such as headers, cookies and status code. - Example:
let mut event = Event::new(); let response = ResponseContext { cookies: Some(r#""csrftoken": "1234567""#.to_owned()), headers: Some(headers_map), status_code: Some(500), body_size: Some(15), data: Some("Invalid request"), }; event .contexts .insert("response".to_owned(), response.into());
- The
Fixes
- build(panic): Fix build without other dependencies (#883) by @liskin
- The
sentry-paniccrate now builds successfully when used as a standalone dependency.
- The
- fix(transport): add rate limits for logs (#894) by @giortzisg
0.42.0
Features
- feat(log): support kv feature of log (#851) by @lcian
- Attributes added to a
logrecord using thekvfeature are now recorded as attributes on the log sent to Sentry.
- Attributes added to a
- feat(types): add all the missing supported envelope headers (#867) by @lcian
- feat(types): add setters for envelope headers (#868) by @lcian
- It's now possible to set all of the envelope headers supported by the protocol when constructing envelopes.
- feat(core): add some DSC fields to transaction envelope headers (#869) by @lcian
- The SDK now sends additional envelope headers with transactions. This should solve some extrapolation issues for span metrics.
Behavioral changes
- feat: filter username and password in URLs (#864) by @lcian
- Usernames and passwords that could be contained in URLs captured when using the Actix Web or axum integration are now always filtered out.
- If the
Requestis created manually by the user, then these fields are not filtered out. - This information was already filtered by Relay, but should also be filtered by the SDK itself as a first line of defense.
Fixes
- docs: match description of
debugoption with behavior since PR #820 (#860) by @AlexTMjugador
0.41.0
Breaking changes
- feat(tracing): support combined EventFilters and EventMappings (#847) by @lcian
EventFilterhas been changed to abitflagsstruct.- It's now possible to map a
tracingevent to multiple items in Sentry by combining multiple event filters in theevent_filter, e.g.tracing::Level::ERROR => EventFilter::Event | EventFilter::Log. - It's also possible to use
EventMapping::Combinedto map atracingevent to multiple items in Sentry. ctxin the signatures ofevent_from_event,breadcrumb_from_eventandlog_from_eventhas been changed to takeimpl Into<Option<&'context Context<'context, S>>>to avoid cloning theContextwhen mapping to multiple items.
Features
Fixes
Dependencies
- chore(deps): bump
anyhowand disable itsbacktracefeature (#632) by @LunaBorowska
0.40.0
Logs
We've released two new integrations for Sentry structured logs, the tracing and log integration. Read below on how to start sending logs to Sentry.
Breaking changes
- refactor(logs): apply user attributes to log regardless of
send_default_pii(#843) by @lcian- User attributes should be applied to logs regardless of
send_default_pii. Therefore, that parameter was removed fromsentry_core::Scope::apply_to_log.
- User attributes should be applied to logs regardless of
Features
- feat(tracing): add support for logs (#840) by @lcian
- To capture
tracingevents as Sentry structured logs, enable thelogsfeature of thesentrycrate. - Then, initialize the SDK with
enable_logs: truein your client options. - Finally, set up a custom event filter to map events to logs based on criteria such as severity. For example:
let sentry_layer = sentry_tracing::layer().event_filter(|md| match *md.level() { tracing::Level::ERROR => EventFilter::Event, tracing::Level::TRACE => EventFilter::Ignore, _ => EventFilter::Log, });
- To capture
- feat(log): add support for logs (#841) by @lcian
- To capture
logrecords as Sentry structured logs, enable thelogsfeature of thesentrycrate. - Then, initialize the SDK with
enable_logs: truein your client options. - Finally, set up a custom event filter to map records to Sentry logs based on criteria such as severity. For example:
let logger = sentry::integrations::log::SentryLogger::new().filter(|md| match md.level() { log::Level::Error => LogFilter::Event, log::Level::Trace => LogFilter::Ignore, _ => LogFilter::Log, });
- To capture
- refactor(logs): cache default attributes and add OS attributes (#842) by @lcian
os.nameandos.versionare now being attached to logs as default attributes.
Fixes
Behavioral changes
- refactor(tracing): refactor internal code and improve docs (#839) by @lcian
- Errors carried by breadcrumbs will now be stored in the breadcrumb
dataunder their original field name. - Before, they were all stored under a single key called
errors.
- Errors carried by breadcrumbs will now be stored in the breadcrumb
Dependencies
0.39.0
Logs
Support for Sentry structured logs has been added to the SDK.
- To set up logs, enable the
logsfeature of thesentrycrate and setenable_logstotruein your client options. - Then, use the
logger_trace!,logger_debug!,logger_info!,logger_warn!,logger_error!andlogger_fatal!macros to capture logs. - To filter or update logs before they are sent, you can use the
before_send_logclient option. - Please note that breaking changes could occur until the API is finalized.
Features
- feat(logs): add log protocol types (#821) by @lcian
- feat(logs): add ability to capture and send logs (#823) by @lcian & @Swatinem
- feat(logs): add macro-based API (#827) by @lcian & @szokeasaurusrex
- feat(logs): send logs in batches (#831) by @lcian
Behavioral changes
- refactor(core): remove support for traceparent (#807) by @lcian
- The SDK doesn't support parsing the
traceparentdistributed tracing header anymore. This means thatcontinue_from_headers(and, as a consequence,parse_headers) will only take into account thesentry-traceheader from now on. - If you need to continue traces based on the information in the
traceparentheader, please parse the information from it and then use the API to manually create the desired transaction.
- The SDK doesn't support parsing the
- feat(core): implement Tracing without Performance (#811) by @lcian
- The SDK now implements Tracing without Performance, which makes it so that each
Scopeis associated with an object holding some tracing information. - This information is used as a fallback when capturing an event with tracing disabled or otherwise no ongoing span, to still allow related events to be linked by a trace.
- A new API
Scope::iter_trace_propagation_headershas been provided that will use the fallback tracing information if there is no currentSpanon theScope.
- The SDK now implements Tracing without Performance, which makes it so that each
Breaking changes
0.38.1
Fixes
- build: include
sentry-actixoptionally whenrelease-healthis enabled (#806) by @lciansentry-actixis now being included as a dependency only when explicitly added, either as a direct dependency or through theactixfeature flag of thesentrycrate.- Due to a mistake in the
Cargo.toml, it was previously being included as a dependency by default when using just thesentrycrate with default features.
0.38.0
OpenTelemetry integration
An OpenTelemetry integration has been released. Please refer to the changelog entry below for the details.
Breaking changes
- refactor(tracing): remove
EventFilter::exceptionand always attach exception (#768) by @lcian- The
EventFilter::Exceptionenum variant has been removed. Please useEventFilter::Eventinstead to achieve the same behavior. - Using
EventFilter::Eventwill always attach any error struct used within theerrorfield passed to thetracingmacro, asEventFilter::Exceptiondid previously. - The
errorfield will also be attached to breadcrumbs as anerrorsfield resembling the structure of Sentry events created from error structs.
- The
- fix: use
release-healthflag insentry-actixand remove it from subcrates where unneeded (#787) by @lcian- As a follow-up from the changes in the previous release, the
ClientOptionsfieldsauto_session_trackingandsession_modeare now gated behind therelease-healthfeature flag of thesentrycrate. - If you depend on
sentrywithdefault-features = false, you need to include therelease-healthfeature flag to benefit from the Release Health features of Sentry and have access to the aforementioned client options. - The
release-healthfeature flag is used correctly insentry-actixto enable compilation of that subcrate when it's disabled. - The
release-healthhas been removed from thesentry-tracingandsentry-towersubcrates, where it was unnecessary.
- As a follow-up from the changes in the previous release, the
- refactor: remove Surf transport (#766) by @lcian
- The Surf transport has been removed as the
surfcrate is unmaintained and it was holding back dependency upgrades. - If you really want to still use Surf, you can define a custom
TransportFactoryand pass it as thetransportin yourClientOptions
- The Surf transport has been removed as the
Behavioral changes
- refactor: honor
send_default_piiinsentry-actixandsentry-tower(#771) by @lcian- The client option
send_default_pii(disabled by default) is now honored bysentry-actixandsentry-tower. - This means that potentially sensitive headers such as authorization, cookies, and those that usually contain the user's IP address are filtered and not sent to Sentry.
- If you want to get back to the previous behavior and capture all headers, please set
send_default_piitotruein yourClientOptions. - Please refer to our Data Collected page for a comprehensive view of the data collected by the SDK.
- The client option
- refactor(debug-images): force init
DEBUG_METAon integration init (#773) by @lcian- The
DebugImagesintegration has been updated to init theDEBUG_METALazyimmediately. - Using this integration is known to cause issues in specific versions of the Linux kernel due to issues in a library it depends on.
- Previously, on problematic systems the SDK would cause deadlock after capturing the first event. Now the SDK will panic on initialization instead. Please open an issue if you're affected.
- The
Features
- feat(otel): add OpenTelemetry SpanProcessor, Propagator, Extractor (#779) by @lcian
- A new integration for the
opentelemetrycrate has been released. - It can be used to capture spans created using the
opentelemetryAPI and send them to Sentry. - Distributed tracing is also supported, provided that the upstream/downstream services support the Sentry or W3C distributed tracing metadata format.
- Please refer to the subcrate's README or the crate docs to see an example of setup and usage.
- A new integration for the
- feat: expose
sentry-actixas a feature ofsentry(#788) by @lciansentry-actixis now exposed by thesentrycrate assentry::integrations::actix, gated behind theactixfeature flag.- Please update your dependencies to not depend on the
sentry-actixsubcrate directly.
Dependencies
- build(deps): bump openssl from 0.10.71 to 0.10.72 (#762) by @dependabot
- build(deps): bump tokio from 1.44.1 to 1.44.2 (#763) by @dependabot
- chore(deps): bump some dependencies and update
Cargo.lock(#772) by @lcian
Various fixes & improvements
- Replace
once_cellwithstd::sync::LazyLock(#776) by @FalkWoldmann - chore: update GH issue templates for Linear compatibility (#777) by @stephanie-anderson
- chore: update issue templates with blank issue and Discord link (#778) by @lcian
- refactor(core): fail with message if TLS backend not available (#784) by @lcian
- build: add
sentry-opentelemetryto workspace (#789) by @lcian - docs: update docs including OTEL and other integrations (#790) by @lcian
- fix(otel): fix doctests (#794) by @lcian
- fix(otel): fix span and trace ids for distributed tracing (#801) by @lcian
- build(otel): exclude version from circular dev-dependencies (#802) by @lcian
0.37.0
Breaking changes
- chore(msrv):
cargo updateand bump MSRV to 1.81 (#754) by @lcian- The minimum supported Rust version has been raised to 1.81.
- feat(core): introduce
release-healthfeature (#749) by @pepperoni505- A new
release-healthfeature flag was introduced that gates the Release Health features of Sentry. - This allows for compilation of the SDK on certain WASM targets.
- Release Health features were already present and enabled with no feature flag in previous versions.
- The new feature flag will be enabled by default when using
sentry,sentry-actix,sentry-towerorsentry-tracingwith the default features. - If you're fine-tuning your feature flags, make sure to enable
release-healthto get back the previous behavior.
- A new
- ref(metrics): remove features and code related to the old metrics beta (#740) by @lcian
- The metrics feature and the code related to it has been removed from the crate, as the Sentry backend stopped ingesting metrics a while ago.
- Switch to MIT license (#724) by @cleptric
- The license for the crates has been changed to MIT.
Features
- feat(actix): capture HTTP request body (#731) by @pacifistes
- The middleware for
actix-webnow supports capturing and attaching the request body to HTTP request transactions. - You need to enable
send_default_piiin your client options for this to be enabled, and you can fine-tune the behavior using the new optionmax_request_body_size.
- The middleware for
- feat(core):
transaction.set_datasets data onTraceContext(#739) by @lciantransaction.set_datanow sets data onTraceContext, as the SDK should not use theextrafield.
- ref(backtrace): add entries and extra logic for in-app detection (#756) by @lcian
- feat(core): add more frames to be considered not in_app (#760) by @lcian
- The logic used by the SDK to detect
in-appstack frames has been improved. Now the SDK will mark more frames as notin-app. - A similar improvement has been added to the Sentry backend so that old versions of the SDK can benefit from improved
in-appreporting.
- The logic used by the SDK to detect
Fixes
- fix(http): Finish transaction on drop (#727) by @Dav1dde
- Fixed a bug where the current transaction was not finished (hence not sent to Sentry) when its corresponding future was dropped, e.g. due to a panic.
- follow #439 for actix-web. fix #680 (#737) by @pavel-rosputko
- The HTTP request metadata is now being correctly attached to transactions when using
sentry-actix.
- The HTTP request metadata is now being correctly attached to transactions when using
- fix(tracing): wrap error with synthetic mechanism only if attaching stacktrace (#755) by @lcian
- Fixed a bug that should result in improved grouping and issue titles for events reported by
sentry-tracingwhen not capturing stack traces.
- Fixed a bug that should result in improved grouping and issue titles for events reported by
- fix(actix): process request in other middleware using correct Hub (#758) by @lcian
- The subsequent middleware in the chain when processing a request now execute within the correct Hub.
- fix(anyhow): attach stacktrace only if error provides backtrace (#759) by @lcian
- Fixed a bug where the SDK was providing incorrect stack traces when capturing an
anyhowwhen thebacktracefeature is enabled butRUST_BACKTRACEis not set. - This should result in correct grouping of the affected issues.
- Fixed a bug where the SDK was providing incorrect stack traces when capturing an
Various fixes & improvements
- Fix CS (#726) by @cleptric
- fix(doctests): update prost (#750) by @lcian
- chore(msrv): bump MSRV to 1.75 (#751) by @lcian
- refactor(actix): simplify body_from_http (#757) by @robjtede
- chore: prepare changelog for release (#761) by @lcian
Dependencies
- build(deps): bump openssl from 0.10.66 to 0.10.70 (#732) by @dependabot
- build(deps): bump ring from 0.17.8 to 0.17.13 (#747) by @dependabot