use opentelemetry::KeyValue;
use tracing_opentelemetry::OpenTelemetrySpanExt;
pub fn set_attribute(attribute: KeyValue) {
let KeyValue { key, value, .. } = attribute;
tracing::Span::current().set_attribute(key, value);
}
pub fn set_attributes(attributes: impl IntoIterator<Item = KeyValue>) {
let span = tracing::Span::current();
for KeyValue { key, value, .. } in attributes {
span.set_attribute(key, value);
}
}
pub fn add_event(name: impl Into<std::borrow::Cow<'static, str>>, attributes: impl IntoIterator<Item = KeyValue>) {
tracing::Span::current().add_event(name, attributes.into_iter().collect());
}
pub fn record_error(error: &dyn std::error::Error) {
let span = tracing::Span::current();
span.set_attribute("error", true);
span.add_event(
"exception",
vec![KeyValue::new("exception.message", error.to_string())],
);
}