Skip to content

Commit 799f211

Browse files
authored
fix: Handle #[instrument(err)] by extracting the error message (#453)
1 parent 5c338e7 commit 799f211

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

sentry-tracing/src/converters.rs

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ fn extract_event_data(event: &tracing_core::Event) -> (Option<String>, FieldVisi
2626
let message = visitor
2727
.json_values
2828
.remove("message")
29+
// When #[instrument(err)] is used the event does not have a message attached to it.
30+
// the error message is attached to the field "error".
31+
.or_else(|| visitor.json_values.remove("error"))
2932
.and_then(|v| v.as_str().map(|s| s.to_owned()));
3033

3134
(message, visitor)

sentry/tests/test_tracing.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ fn test_tracing() {
1212
.with(sentry_tracing::layer())
1313
.set_default();
1414

15+
#[tracing::instrument(err)]
16+
fn fn_errors() -> Result<(), Box<dyn std::error::Error>> {
17+
Err("I'm broken!".into())
18+
}
19+
1520
let events = sentry::test::with_captured_events(|| {
1621
sentry::configure_scope(|scope| {
1722
scope.set_tag("worker", "worker1");
@@ -26,9 +31,10 @@ fn test_tracing() {
2631
let err = "NaN".parse::<usize>().unwrap_err();
2732
let err: &dyn std::error::Error = &err;
2833
tracing::error!(err, tagname = "tagvalue");
34+
let _ = fn_errors();
2935
});
3036

31-
assert_eq!(events.len(), 3);
37+
assert_eq!(events.len(), 4);
3238
let mut events = events.into_iter();
3339

3440
let event = events.next().unwrap();
@@ -95,6 +101,9 @@ fn test_tracing() {
95101
}
96102
_ => panic!("Wrong context type"),
97103
}
104+
105+
let event = events.next().unwrap();
106+
assert_eq!(event.message, Some("I'm broken!".to_string()));
98107
}
99108

100109
#[tracing::instrument(fields(span_field))]

0 commit comments

Comments
 (0)