Struct tracing_subscriber::layer::Context
source · pub struct Context<'a, S> { /* private fields */ }
Expand description
Represents information about the current context provided to Layer
s by the
wrapped Subscriber
.
To access stored data keyed by a span ID, implementors of the Layer
trait should ensure that the Subscriber
type parameter is also bound by the
LookupSpan
:
use tracing::Subscriber;
use tracing_subscriber::{Layer, registry::LookupSpan};
pub struct MyLayer;
impl<S> Layer<S> for MyLayer
where
S: Subscriber + for<'a> LookupSpan<'a>,
{
// ...
}
Implementations§
source§impl<'a, S> Context<'a, S>where
S: Subscriber,
impl<'a, S> Context<'a, S>where S: Subscriber,
sourcepub fn current_span(&self) -> Current
pub fn current_span(&self) -> Current
Returns the wrapped subscriber’s view of the current span.
sourcepub fn enabled(&self, metadata: &Metadata<'_>) -> bool
pub fn enabled(&self, metadata: &Metadata<'_>) -> bool
Returns whether the wrapped subscriber would enable the current span.
sourcepub fn event(&self, event: &Event<'_>)
pub fn event(&self, event: &Event<'_>)
Records the provided event
with the wrapped subscriber.
Notes
- The subscriber is free to expect that the event’s callsite has been
registered, and may panic or fail to observe the event if this is
not the case. The
tracing
crate’s macros ensure that all events are registered, but if the event is constructed through other means, the user is responsible for ensuring thatregister_callsite
has been called prior to calling this method. - This does not call
enabled
on the inner subscriber. If the caller wishes to apply the wrapped subscriber’s filter before choosing whether to record the event, it may first callContext::enabled
to check whether the event would be enabled. This allowsLayer
s to elide constructing the event if it would not be recorded.
sourcepub fn event_span(&self, event: &Event<'_>) -> Option<SpanRef<'_, S>>where
S: for<'lookup> LookupSpan<'lookup>,
pub fn event_span(&self, event: &Event<'_>) -> Option<SpanRef<'_, S>>where S: for<'lookup> LookupSpan<'lookup>,
Returns a SpanRef
for the parent span of the given Event
, if
it has a parent.
If the event has an explicitly overridden parent, this method returns
a reference to that span. If the event’s parent is the current span,
this returns a reference to the current span, if there is one. If this
returns None
, then either the event’s parent was explicitly set to
None
, or the event’s parent was defined contextually, but no span
is currently entered.
Compared to Context::current_span
and Context::lookup_current
,
this respects overrides provided by the Event
.
Compared to Event::parent
, this automatically falls back to the contextual
span, if required.
use tracing::{Event, Subscriber};
use tracing_subscriber::{
layer::{Context, Layer},
prelude::*,
registry::LookupSpan,
};
struct PrintingLayer;
impl<S> Layer<S> for PrintingLayer
where
S: Subscriber + for<'lookup> LookupSpan<'lookup>,
{
fn on_event(&self, event: &Event, ctx: Context<S>) {
let span = ctx.event_span(event);
println!("Event in span: {:?}", span.map(|s| s.name()));
}
}
tracing::subscriber::with_default(tracing_subscriber::registry().with(PrintingLayer), || {
tracing::info!("no span");
// Prints: Event in span: None
let span = tracing::info_span!("span");
tracing::info!(parent: &span, "explicitly specified");
// Prints: Event in span: Some("span")
let _guard = span.enter();
tracing::info!("contextual span");
// Prints: Event in span: Some("span")
});
Note: This requires the wrapped subscriber to implement theLookupSpan
trait. See the documentation onContext
's declaration for details.
sourcepub fn metadata(&self, id: &Id) -> Option<&'static Metadata<'static>>where
S: for<'lookup> LookupSpan<'lookup>,
pub fn metadata(&self, id: &Id) -> Option<&'static Metadata<'static>>where S: for<'lookup> LookupSpan<'lookup>,
Returns metadata for the span with the given id
, if it exists.
If this returns None
, then no span exists for that ID (either it has
closed or the ID is invalid).
sourcepub fn span(&self, id: &Id) -> Option<SpanRef<'_, S>>where
S: for<'lookup> LookupSpan<'lookup>,
pub fn span(&self, id: &Id) -> Option<SpanRef<'_, S>>where S: for<'lookup> LookupSpan<'lookup>,
Returns stored data for the span with the given id
, if it exists.
If this returns None
, then no span exists for that ID (either it has
closed or the ID is invalid).
Note: This requires the wrapped subscriber to implement theLookupSpan
trait. See the documentation onContext
's declaration for details.
sourcepub fn exists(&self, id: &Id) -> boolwhere
S: for<'lookup> LookupSpan<'lookup>,
pub fn exists(&self, id: &Id) -> boolwhere S: for<'lookup> LookupSpan<'lookup>,
Returns true
if an active span exists for the given Id
.
Note: This requires the wrapped subscriber to implement theLookupSpan
trait. See the documentation onContext
's declaration for details.
sourcepub fn lookup_current(&self) -> Option<SpanRef<'_, S>>where
S: for<'lookup> LookupSpan<'lookup>,
pub fn lookup_current(&self) -> Option<SpanRef<'_, S>>where S: for<'lookup> LookupSpan<'lookup>,
Returns stored data for the span that the wrapped subscriber considers to be the current.
If this returns None
, then we are not currently within a span.
Note: This requires the wrapped subscriber to implement theLookupSpan
trait. See the documentation onContext
's declaration for details.
sourcepub fn scope(&self) -> Scope<'_, S> ⓘwhere
S: for<'lookup> LookupSpan<'lookup>,
👎Deprecated since 0.2.19: equivalent to self.current_span().id().and_then(|id| self.span_scope(id).from_root())
but consider passing an explicit ID instead of relying on the contextual span
pub fn scope(&self) -> Scope<'_, S> ⓘwhere S: for<'lookup> LookupSpan<'lookup>,
self.current_span().id().and_then(|id| self.span_scope(id).from_root())
but consider passing an explicit ID instead of relying on the contextual spanReturns an iterator over the stored data for all the spans in the current context, starting the root of the trace tree and ending with the current span.
If this iterator is empty, then there are no spans in the current context.
Note: This requires the wrapped subscriber to implement theLookupSpan
trait. See the documentation onContext
's declaration for details.
sourcepub fn span_scope(&self, id: &Id) -> Option<Scope<'_, S>>where
S: for<'lookup> LookupSpan<'lookup>,
pub fn span_scope(&self, id: &Id) -> Option<Scope<'_, S>>where S: for<'lookup> LookupSpan<'lookup>,
Returns an iterator over the stored data for all the spans in the current context, starting with the specified span and ending with the root of the trace tree and ending with the current span.
Note: Compared toscope
this returns the spans in reverse order (from leaf to root). UseScope::from_root
in case root-to-leaf ordering is desired.
Note: This requires the wrapped subscriber to implement theLookupSpan
trait. See the documentation onContext
's declaration for details.
sourcepub fn event_scope(&self, event: &Event<'_>) -> Option<Scope<'_, S>>where
S: for<'lookup> LookupSpan<'lookup>,
pub fn event_scope(&self, event: &Event<'_>) -> Option<Scope<'_, S>>where S: for<'lookup> LookupSpan<'lookup>,
Returns an iterator over the stored data for all the spans in the current context, starting with the parent span of the specified event, and ending with the root of the trace tree and ending with the current span.
Note: Compared toscope
this returns the spans in reverse order (from leaf to root). UseScope::from_root
in case root-to-leaf ordering is desired.
Note: This requires the wrapped subscriber to implement theLookupSpan
trait. See the documentation onContext
's declaration for details.