From 799f21108270d1c81332e17707bb0f25dc3c646d Mon Sep 17 00:00:00 2001 From: Kevin Velasco Date: Mon, 11 Apr 2022 21:15:25 +0800 Subject: [PATCH] fix: Handle #[instrument(err)] by extracting the error message (#453) --- sentry-tracing/src/converters.rs | 3 +++ sentry/tests/test_tracing.rs | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sentry-tracing/src/converters.rs b/sentry-tracing/src/converters.rs index 8602e382..9b1e36d3 100644 --- a/sentry-tracing/src/converters.rs +++ b/sentry-tracing/src/converters.rs @@ -26,6 +26,9 @@ fn extract_event_data(event: &tracing_core::Event) -> (Option, FieldVisi let message = visitor .json_values .remove("message") + // When #[instrument(err)] is used the event does not have a message attached to it. + // the error message is attached to the field "error". + .or_else(|| visitor.json_values.remove("error")) .and_then(|v| v.as_str().map(|s| s.to_owned())); (message, visitor) diff --git a/sentry/tests/test_tracing.rs b/sentry/tests/test_tracing.rs index d50e234a..d39c2e37 100644 --- a/sentry/tests/test_tracing.rs +++ b/sentry/tests/test_tracing.rs @@ -12,6 +12,11 @@ fn test_tracing() { .with(sentry_tracing::layer()) .set_default(); + #[tracing::instrument(err)] + fn fn_errors() -> Result<(), Box> { + Err("I'm broken!".into()) + } + let events = sentry::test::with_captured_events(|| { sentry::configure_scope(|scope| { scope.set_tag("worker", "worker1"); @@ -26,9 +31,10 @@ fn test_tracing() { let err = "NaN".parse::().unwrap_err(); let err: &dyn std::error::Error = &err; tracing::error!(err, tagname = "tagvalue"); + let _ = fn_errors(); }); - assert_eq!(events.len(), 3); + assert_eq!(events.len(), 4); let mut events = events.into_iter(); let event = events.next().unwrap(); @@ -95,6 +101,9 @@ fn test_tracing() { } _ => panic!("Wrong context type"), } + + let event = events.next().unwrap(); + assert_eq!(event.message, Some("I'm broken!".to_string())); } #[tracing::instrument(fields(span_field))]