From 46abbefe1807d17ae0e417a20d5aa664c061b4f3 Mon Sep 17 00:00:00 2001 From: lcian Date: Wed, 9 Apr 2025 16:59:16 +0200 Subject: [PATCH 1/2] feat(tracing): attach errors to warning events and breadcrumbs --- sentry-tracing/src/converters.rs | 39 ++++++++++++++------------------ sentry-tracing/src/layer.rs | 5 ++-- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/sentry-tracing/src/converters.rs b/sentry-tracing/src/converters.rs index 836e8933d..5822e96b3 100644 --- a/sentry-tracing/src/converters.rs +++ b/sentry-tracing/src/converters.rs @@ -150,12 +150,27 @@ where S: Subscriber + for<'a> LookupSpan<'a>, { let (message, visitor) = extract_event_data_with_context(event, ctx.into()); + + let FieldVisitor { + exceptions, + mut json_values, + } = visitor; + + let errors = exceptions + .iter() + .rev() + .filter_map(|x| x.value.as_ref().map(|v| format!("{}: {}", x.ty, *v))) + .collect::>(); + if !errors.is_empty() { + json_values.insert("errors".to_owned(), errors.into()); + } + Breadcrumb { category: Some(event.metadata().target().to_owned()), ty: "log".into(), level: convert_tracing_level(event.metadata().level()), message, - data: visitor.json_values, + data: json_values, ..Default::default() } } @@ -217,31 +232,11 @@ fn contexts_from_event( context } -/// Creates an [`Event`] from a given [`tracing_core::Event`] +/// Creates an [`Event`] (possibly carrying an exception) from a given [`tracing_core::Event`] pub fn event_from_event<'context, S>( event: &tracing_core::Event, ctx: impl Into>>, ) -> Event<'static> -where - S: Subscriber + for<'a> LookupSpan<'a>, -{ - let (message, mut visitor) = extract_event_data_with_context(event, ctx.into()); - - Event { - logger: Some(event.metadata().target().to_owned()), - level: convert_tracing_level(event.metadata().level()), - message, - tags: tags_from_event(&mut visitor.json_values), - contexts: contexts_from_event(event, visitor.json_values), - ..Default::default() - } -} - -/// Creates an exception [`Event`] from a given [`tracing_core::Event`] -pub fn exception_from_event<'context, S>( - event: &tracing_core::Event, - ctx: impl Into>>, -) -> Event<'static> where S: Subscriber + for<'a> LookupSpan<'a>, { diff --git a/sentry-tracing/src/layer.rs b/sentry-tracing/src/layer.rs index a2f94d176..09e8afdd3 100644 --- a/sentry-tracing/src/layer.rs +++ b/sentry-tracing/src/layer.rs @@ -216,9 +216,8 @@ where EventFilter::Breadcrumb => { EventMapping::Breadcrumb(breadcrumb_from_event(event, span_ctx)) } - EventFilter::Event => EventMapping::Event(event_from_event(event, span_ctx)), - EventFilter::Exception => { - EventMapping::Event(exception_from_event(event, span_ctx)) + EventFilter::Event | EventFilter::Exception => { + EventMapping::Event(event_from_event(event, span_ctx)) } } } From a726079632ae00768f80097f8d25102f7d11e7e8 Mon Sep 17 00:00:00 2001 From: lcian Date: Wed, 9 Apr 2025 20:45:08 +0200 Subject: [PATCH 2/2] improve --- sentry-tracing/src/layer.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/sentry-tracing/src/layer.rs b/sentry-tracing/src/layer.rs index 09e8afdd3..0ae51dfab 100644 --- a/sentry-tracing/src/layer.rs +++ b/sentry-tracing/src/layer.rs @@ -20,10 +20,8 @@ pub enum EventFilter { Ignore, /// Create a [`Breadcrumb`] from this [`Event`] Breadcrumb, - /// Create a message [`sentry_core::protocol::Event`] from this [`Event`] + /// Create a [`sentry_core::protocol::Event`] from this [`Event`] Event, - /// Create an exception [`sentry_core::protocol::Event`] from this [`Event`] - Exception, } /// The type of data Sentry should ingest for a [`Event`] @@ -44,7 +42,7 @@ pub enum EventMapping { /// `warning` and `info`, and `debug` and `trace` logs are ignored. pub fn default_event_filter(metadata: &Metadata) -> EventFilter { match metadata.level() { - &Level::ERROR => EventFilter::Exception, + &Level::ERROR => EventFilter::Event, &Level::WARN | &Level::INFO => EventFilter::Breadcrumb, &Level::DEBUG | &Level::TRACE => EventFilter::Ignore, } @@ -216,9 +214,7 @@ where EventFilter::Breadcrumb => { EventMapping::Breadcrumb(breadcrumb_from_event(event, span_ctx)) } - EventFilter::Event | EventFilter::Exception => { - EventMapping::Event(event_from_event(event, span_ctx)) - } + EventFilter::Event => EventMapping::Event(event_from_event(event, span_ctx)), } } };