Trait tracing_subscriber::layer::Layer
source · pub trait Layer<S>where
S: Subscriber,
Self: 'static,{
Show 14 methods
// Provided methods
fn on_layer(&mut self, subscriber: &mut S) { ... }
fn register_callsite(
&self,
metadata: &'static Metadata<'static>
) -> Interest { ... }
fn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool { ... }
fn new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>) { ... }
fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>) { ... }
fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>) { ... }
fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>) { ... }
fn on_enter(&self, _id: &Id, _ctx: Context<'_, S>) { ... }
fn on_exit(&self, _id: &Id, _ctx: Context<'_, S>) { ... }
fn on_close(&self, _id: Id, _ctx: Context<'_, S>) { ... }
fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>) { ... }
fn and_then<L>(self, layer: L) -> Layered<L, Self, S>
where L: Layer<S>,
Self: Sized { ... }
fn with_subscriber(self, inner: S) -> Layered<Self, S>
where Self: Sized { ... }
fn with_filter<F>(self, filter: F) -> Filtered<Self, F, S>
where Self: Sized,
F: Filter<S> { ... }
}Expand description
A composable handler for tracing events.
A Layer implements a behavior for recording or collecting traces that can
be composed together with other Layers to build a Subscriber. See the
module-level documentation for details.
Provided Methods§
sourcefn on_layer(&mut self, subscriber: &mut S)
fn on_layer(&mut self, subscriber: &mut S)
Performs late initialization when attaching a Layer to a
Subscriber.
This is a callback that is called when the Layer is added to a
Subscriber (e.g. in Layer::with_subscriber and
SubscriberExt::with). Since this can only occur before the
Subscriber has been set as the default, both the Layer and
Subscriber are passed to this method mutably. This gives the
Layer the opportunity to set any of its own fields with values
recieved by method calls on the Subscriber.
For example, Filtered layers implement on_layer to call the
Subscriber’s register_filter method, and store the returned
FilterId as a field.
Note In most cases, Layer implementations will not need to
implement this method. However, in cases where a type implementing
Layer wraps one or more other types that implement Layer, like the
Layered and Filtered types in this crate, that type MUST ensure
that the inner Layers’ on_layer methods are called. Otherwise,
functionality that relies on on_layer, such as per-layer filtering,
may not work correctly.
sourcefn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest
fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest
Registers a new callsite with this layer, returning whether or not
the layer is interested in being notified about the callsite, similarly
to Subscriber::register_callsite.
By default, this returns Interest::always() if self.enabled returns
true, or Interest::never() if it returns false.
Note: This method (andLayer::enabled) determine whether a span or event is globally enabled, not whether the individual layer will be notified about that span or event. This is intended to be used by layers that implement filtering for the entire stack. Layers which do not wish to be notified about certain spans or events but do not wish to globally disable them should ignore those spans or events in theiron_event,on_enter,on_exit, and other notification methods.
See the trait-level documentation for more information on filtering
with Layers.
Layers may also implement this method to perform any behaviour that
should be run once per callsite. If the layer wishes to use
register_callsite for per-callsite behaviour, but does not want to
globally enable or disable those callsites, it should always return
Interest::always().
sourcefn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool
fn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool
Returns true if this layer is interested in a span or event with the
given metadata in the current Context, similarly to
Subscriber::enabled.
By default, this always returns true, allowing the wrapped subscriber
to choose to disable the span.
Note: This method (andLayer::register_callsite) determine whether a span or event is globally enabled, not whether the individual layer will be notified about that span or event. This is intended to be used by layers that implement filtering for the entire stack. Layers which do not wish to be notified about certain spans or events but do not wish to globally disable them should ignore those spans or events in theiron_event,on_enter,on_exit, and other notification methods.
See the trait-level documentation for more information on filtering
with Layers.
sourcefn new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
fn new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
Notifies this layer that a new span was constructed with the given
Attributes and Id.
sourcefn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>)
fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>)
Notifies this layer that a span with the given Id recorded the given
values.
sourcefn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>)
fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>)
Notifies this layer that a span with the ID span recorded that it
follows from the span with the ID follows.
sourcefn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>)
fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>)
Notifies this layer that an event has occurred.
sourcefn on_enter(&self, _id: &Id, _ctx: Context<'_, S>)
fn on_enter(&self, _id: &Id, _ctx: Context<'_, S>)
Notifies this layer that a span with the given ID was entered.
sourcefn on_exit(&self, _id: &Id, _ctx: Context<'_, S>)
fn on_exit(&self, _id: &Id, _ctx: Context<'_, S>)
Notifies this layer that the span with the given ID was exited.
sourcefn on_close(&self, _id: Id, _ctx: Context<'_, S>)
fn on_close(&self, _id: Id, _ctx: Context<'_, S>)
Notifies this layer that the span with the given ID has been closed.
sourcefn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>)
fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>)
Notifies this layer that a span ID has been cloned, and that the subscriber returned a different ID.
sourcefn and_then<L>(self, layer: L) -> Layered<L, Self, S>where
L: Layer<S>,
Self: Sized,
fn and_then<L>(self, layer: L) -> Layered<L, Self, S>where L: Layer<S>, Self: Sized,
Composes this layer around the given Layer, returning a Layered
struct implementing Layer.
The returned Layer will call the methods on this Layer and then
those of the new Layer, before calling the methods on the subscriber
it wraps. For example:
pub struct FooLayer {
// ...
}
pub struct BarLayer {
// ...
}
pub struct MySubscriber {
// ...
}
impl<S: Subscriber> Layer<S> for FooLayer {
// ...
}
impl<S: Subscriber> Layer<S> for BarLayer {
// ...
}
let subscriber = FooLayer::new()
.and_then(BarLayer::new())
.with_subscriber(MySubscriber::new());Multiple layers may be composed in this manner:
pub struct BazLayer {
// ...
}
impl<S: Subscriber> Layer<S> for BazLayer {
// ...
}
let subscriber = FooLayer::new()
.and_then(BarLayer::new())
.and_then(BazLayer::new())
.with_subscriber(MySubscriber::new());sourcefn with_subscriber(self, inner: S) -> Layered<Self, S>where
Self: Sized,
fn with_subscriber(self, inner: S) -> Layered<Self, S>where Self: Sized,
Composes this Layer with the given Subscriber, returning a
Layered struct that implements Subscriber.
The returned Layered subscriber will call the methods on this Layer
and then those of the wrapped subscriber.
For example:
pub struct FooLayer {
// ...
}
pub struct MySubscriber {
// ...
}
impl<S: Subscriber> Layer<S> for FooLayer {
// ...
}
let subscriber = FooLayer::new()
.with_subscriber(MySubscriber::new());sourcefn with_filter<F>(self, filter: F) -> Filtered<Self, F, S>where
Self: Sized,
F: Filter<S>,
fn with_filter<F>(self, filter: F) -> Filtered<Self, F, S>where Self: Sized, F: Filter<S>,
Combines self with a Filter, returning a Filtered layer.
The Filter will control which spans and events are enabled for
this layer. See the trait-level documentation for details on
per-layer filtering.
Trait Implementations§
source§impl<S> Layer<S> for Box<dyn Layer<S> + Send + Sync>where
S: Subscriber,
impl<S> Layer<S> for Box<dyn Layer<S> + Send + Sync>where S: Subscriber,
source§fn new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
fn new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
Attributes and Id.source§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_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_event(&self, event: &Event<'_>, ctx: Context<'_, S>)
fn on_event(&self, event: &Event<'_>, ctx: Context<'_, S>)
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>where
L: Layer<S>,
Self: Sized,
fn and_then<L>(self, layer: L) -> Layered<L, Self, S>where L: Layer<S>, Self: Sized,
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