pub struct ErrorLayer { /* private fields */ }Expand description
Captures tracing events as Sentry error events.
Using this layer alongside the legacy SentryLayer is unsupported.
Use either the legacy layer or the individual layers, not both.
Implementations§
Source§impl ErrorLayer
impl ErrorLayer
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a layer that captures tracing events as Sentry error events.
Most applications should start with LogLayer, and add this layer if
ERROR events should also be captured as Sentry error events. Combine it with
BreadcrumbLayer to attach the events leading up to each error.
§Filtering
Configure a level filter to limit error-event volume. We recommend capturing only ERROR
events, as shown below.
Do not use this layer without a filter. An unfiltered layer captures every tracing
event, including DEBUG and TRACE, as a Sentry error event. This can quickly exhaust
your Sentry error quota.
use sentry::integrations::tracing::ErrorLayer;
use tracing_subscriber::filter::LevelFilter;
tracing_subscriber::registry()
.with(ErrorLayer::new().with_filter(LevelFilter::ERROR))
.init();
// This will be captured ...
tracing::error!("ERROR event");
// ... but this will not be, due to LevelFilter::ERROR being set.
tracing::warn!("WARN event");§Event conversion
With the default converter:
- String, numeric, and boolean fields prefixed with
tags.become Sentry tags, with the prefix removed. - Other data fields are stored in the
Rust Tracing Fieldscontext on the Sentry error event. - Record an error as
&dyn std::error::Errorto capture its exception type and source chain.
Sourcepub fn enable_span_attributes(self) -> Self
pub fn enable_span_attributes(self) -> Self
Include attributes of parent spans in error events.
We can only include spans captured by a super::SpanLayer on the same subscriber. So,
this option only has any effect when the SpanLayer is installed.
§Filtering
Parent-span attributes are included only when the span is accepted by both SpanLayer
and ErrorLayer. A level filter such as LevelFilter::ERROR therefore omits attributes
from less severe spans.
To include attributes from all spans captured by SpanLayer, we recommend accepting all
spans in this layer’s filter, while filtering events to the desired level, like so:
use sentry::integrations::tracing::{ErrorLayer, SpanLayer};
use tracing_subscriber::filter::{filter_fn, LevelFilter, FilterExt as _};
tracing_subscriber::registry()
.with(SpanLayer::new().with_filter(LevelFilter::INFO))
.with(
ErrorLayer::new()
.enable_span_attributes()
.with_filter(LevelFilter::ERROR.or(filter_fn(|m| m.is_span()))),
)
.init();Including all spans in the error layer filter is safe, because this layer does not send any spans to Sentry.
Trait Implementations§
Source§impl Default for ErrorLayer
impl Default for ErrorLayer
Source§impl<S> Layer<S> for ErrorLayerwhere
S: Subscriber + for<'a> LookupSpan<'a>,
impl<S> Layer<S> for ErrorLayerwhere
S: Subscriber + for<'a> LookupSpan<'a>,
Source§fn on_event(&self, event: &Event<'_>, ctx: Context<'_, S>)
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, S>)
Source§fn on_register_dispatch(&self, subscriber: &Dispatch)
fn on_register_dispatch(&self, subscriber: &Dispatch)
Subscriber. Read moreSource§fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest
fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest
Subscriber::register_callsite. Read moreSource§fn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool
fn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool
true if this layer is interested in a span or event with the
given metadata in the current Context, similarly to
Subscriber::enabled. Read moreSource§fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
Attributes and Id.Source§fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>)
fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>)
Id recorded the given
values.Source§fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>)
fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>)
span recorded that it
follows from the span with the ID follows.Source§fn on_enter(&self, _id: &Id, _ctx: Context<'_, S>)
fn on_enter(&self, _id: &Id, _ctx: Context<'_, S>)
Source§fn on_exit(&self, _id: &Id, _ctx: Context<'_, S>)
fn on_exit(&self, _id: &Id, _ctx: Context<'_, S>)
Source§fn on_close(&self, _id: Id, _ctx: Context<'_, S>)
fn on_close(&self, _id: Id, _ctx: Context<'_, S>)
Source§fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>)
fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>)
Source§fn and_then<L>(self, layer: L) -> Layered<L, Self, S>
fn and_then<L>(self, layer: L) -> Layered<L, Self, S>
Layer, returning a Layered
struct implementing Layer. Read moreSource§fn with_subscriber(self, inner: S) -> Layered<Self, S>where
Self: Sized,
fn with_subscriber(self, inner: S) -> Layered<Self, S>where
Self: Sized,
Layer with the given Subscriber, returning a
Layered struct that implements Subscriber. Read more