๐Ÿ›ˆ Note: This is pre-release documentation for the upcoming tracing 0.2.0 ecosystem.

For the release documentation, please see docs.rs, instead.

Struct DynFilterFn

Source
pub struct DynFilterFn<C, F = fn(&Metadata<'_>, &Context<'_, C>) -> bool, R = fn(&'static Metadata<'static>) -> Interest> { /* private fields */ }
Expand description

A filter implemented by a closure or function pointer that determines whether a given span or event is enabled dynamically, potentially based on the current span context.

This type can be used for both per-subscriber filtering (using its Filter implementation) and global filtering (using its Subscribe implementation).

See the documentation on filtering with subscribers for details.

Implementationsยง

Sourceยง

impl<C, F> DynFilterFn<C, F>
where F: Fn(&Metadata<'_>, &Context<'_, C>) -> bool,

Source

pub fn new(enabled: F) -> Self

Constructs a Filter from a function or closure that returns true if a span or event should be enabled in the current span context.

Unlike FilterFn, a DynFilterFn is constructed from a closure or function pointer that takes both the Metadata for a span or event and the current Context. This means that a DynFilterFn can choose whether to enable spans or events based on information about the current span (or its parents).

If this is not necessary, use FilterFn instead.

See the documentation on per-subscriber filtering for details on using Filters.

ยงExamples
use tracing_subscriber::{
    subscribe::{Subscribe, CollectExt},
    filter::DynFilterFn,
    util::SubscriberInitExt,
};

// Only enable spans or events within a span named "interesting_span".
let my_filter = DynFilterFn::new(|metadata, cx| {
    // If this *is* "interesting_span", make sure to enable it.
    if metadata.is_span() && metadata.name() == "interesting_span" {
        return true;
    }

    // Otherwise, are we in an interesting span?
    if let Some(current_span) = cx.lookup_current() {
        return current_span.name() == "interesting_span";
    }

    false
});

let my_subscriber = tracing_subscriber::fmt::subscriber();

tracing_subscriber::registry()
    .with(my_subscriber.with_filter(my_filter))
    .init();

// This event will not be enabled.
tracing::info!("something happened");

tracing::info_span!("interesting_span").in_scope(|| {
    // This event will be enabled.
    tracing::debug!("something else happened");
});
Sourceยง

impl<C, F, R> DynFilterFn<C, F, R>
where F: Fn(&Metadata<'_>, &Context<'_, C>) -> bool,

Source

pub fn with_max_level_hint(self, max_level_hint: impl Into<LevelFilter>) -> Self

Sets the highest verbosity Level the filter function will enable.

The value passed to this method will be returned by this DynFilterFnโ€™s Filter::max_level_hint method.

If the provided function will not enable all levels, it is recommended to call this method to configure it with the most verbose level it will enable.

ยงExamples
use tracing_subscriber::{
    subscribe::{Subscribe, CollectExt},
    filter::{DynFilterFn, LevelFilter},
    util::SubscriberInitExt,
};
use tracing_core::Level;

// Only enable spans or events with levels at or below `INFO`, if
// we are inside a span called "interesting_span".
let my_filter = DynFilterFn::new(|metadata, cx| {
    // If the level is greater than INFO, disable it.
    if metadata.level() > &Level::INFO {
        return false;
    }

    // If any span in the current scope is named "interesting_span",
    // enable this span or event.
    for span in cx.lookup_current().iter().flat_map(|span| span.scope()) {
        if span.name() == "interesting_span" {
            return true;
         }
    }

    // Otherwise, disable it.
    false
})
    // Since the filter closure will only enable the `INFO` level and
    // below, set the max level hint
    .with_max_level_hint(LevelFilter::INFO);

let my_subscriber = tracing_subscriber::fmt::subscriber();

tracing_subscriber::registry()
    .with(my_subscriber.with_filter(my_filter))
    .init();
Source

pub fn with_callsite_filter<R2>( self, callsite_enabled: R2, ) -> DynFilterFn<C, F, R2> โ“˜
where R2: Fn(&'static Metadata<'static>) -> Interest,

Adds a function for filtering callsites to this filter.

When this filterโ€™s Filter::callsite_enabled method is called, the provided function will be used rather than the default.

By default, DynFilterFn assumes that, because the filter may depend dynamically on the current span context, its result should never be cached. However, some filtering strategies may require dynamic information from the current span context in some cases, but are able to make static filtering decisions from Metadata alone in others.

For example, consider the filter given in the example for DynFilterFn::new. That filter enables all spans named โ€œinteresting_spanโ€, and any events and spans that occur inside of an interesting span. Since the spanโ€™s name is part of its static Metadata, the โ€œinteresting_spanโ€ can be enabled in callsite_enabled:

use tracing_subscriber::{
    subscribe::{Subscribe, CollectExt},
    filter::DynFilterFn,
    util::SubscriberInitExt,
};
use tracing_core::collect::Interest;

// Only enable spans or events within a span named "interesting_span".
let my_filter = DynFilterFn::new(|metadata, cx| {
    // If this *is* "interesting_span", make sure to enable it.
    if metadata.is_span() && metadata.name() == "interesting_span" {
        return true;
    }

    // Otherwise, are we in an interesting span?
    if let Some(current_span) = cx.lookup_current() {
        return current_span.name() == "interesting_span";
    }

    false
}).with_callsite_filter(|metadata| {
    // If this is an "interesting_span", we know we will always
    // enable it.
    if metadata.is_span() && metadata.name() == "interesting_span" {
        return Interest::always();
    }

    // Otherwise, it depends on whether or not we're in an interesting
    // span. You'll have to ask us again for each span/event!
    Interest::sometimes()
});

let my_subscriber = tracing_subscriber::fmt::subscriber();

tracing_subscriber::registry()
    .with(my_subscriber.with_filter(my_filter))
    .init();

Trait Implementationsยง

Sourceยง

impl<C, F, R> Clone for DynFilterFn<C, F, R>
where F: Clone, R: Clone,

Sourceยง

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 ยท Sourceยง

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Sourceยง

impl<C, F, R> Debug for DynFilterFn<C, F, R>

Sourceยง

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Sourceยง

impl<C, F, R> Filter<C> for DynFilterFn<C, F, R>
where F: Fn(&Metadata<'_>, &Context<'_, C>) -> bool, R: Fn(&'static Metadata<'static>) -> Interest,

Available on crate features registry and std only.
Sourceยง

fn enabled(&self, metadata: &Metadata<'_>, cx: &Context<'_, C>) -> bool

Returns true if this subscriber is interested in a span or event with the given Metadata in the current Context, similarly to Collect::enabled. Read more
Sourceยง

fn callsite_enabled(&self, metadata: &'static Metadata<'static>) -> Interest

Returns an Interest indicating whether this subscriber will always, sometimes, or never be interested in the given Metadata. Read more
Sourceยง

fn max_level_hint(&self) -> Option<LevelFilter> โ“˜

Returns an optional hint of the highest verbosity level that this Filter will enable. Read more
Sourceยง

fn event_enabled(&self, event: &Event<'_>, cx: &Context<'_, S>) -> bool

Called before the filtered subscribersโ€™ on_event, to determine if on_event should be called. Read more
Sourceยง

fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)

Notifies this filter that a new span was constructed with the given Attributes and Id. Read more
Sourceยง

fn on_record(&self, id: &Id, values: &Record<'_>, ctx: Context<'_, S>)

Notifies this filter that a span with the given Id recorded the given values. Read more
Sourceยง

fn on_enter(&self, id: &Id, ctx: Context<'_, S>)

Notifies this filter that a span with the given ID was entered. Read more
Sourceยง

fn on_exit(&self, id: &Id, ctx: Context<'_, S>)

Notifies this filter that a span with the given ID was exited. Read more
Sourceยง

fn on_close(&self, id: Id, ctx: Context<'_, S>)

Notifies this filter that a span with the given ID has been closed. Read more
Sourceยง

impl<F, C> From<F> for DynFilterFn<C, F>
where F: Fn(&Metadata<'_>, &Context<'_, C>) -> bool,

Sourceยง

fn from(f: F) -> Self

Converts to this type from the input type.
Sourceยง

impl<C, F, R> Subscribe<C> for DynFilterFn<C, F, R>
where F: Fn(&Metadata<'_>, &Context<'_, C>) -> bool + 'static, R: Fn(&'static Metadata<'static>) -> Interest + 'static, C: Collect,

Sourceยง

fn enabled(&self, metadata: &Metadata<'_>, cx: Context<'_, C>) -> bool

Returns true if this subscriber is interested in a span or event with the given metadata in the current Context, similarly to Collect::enabled. Read more
Sourceยง

fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest

Registers a new callsite with this subscriber, returning whether or not the subscriber is interested in being notified about the callsite, similarly to Collect::register_callsite. Read more
Sourceยง

fn on_register_dispatch(&self, collector: &Dispatch)

Performs late initialization when installing this subscriber as a collector. Read more
Sourceยง

fn on_subscribe(&mut self, collector: &mut C)

Performs late initialization when attaching a subscriber to a collector. Read more
Sourceยง

fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, C>)

Notifies this subscriber that a new span was constructed with the given Attributes and Id.
Sourceยง

fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, C>)

Notifies this subscriber that a span with the given Id recorded the given values.
Sourceยง

fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, C>)

Notifies this subscriber that a span with the ID span recorded that it follows from the span with the ID follows.
Sourceยง

fn event_enabled(&self, _event: &Event<'_>, _ctx: Context<'_, C>) -> bool

Called before on_event, to determine if on_event should be called. Read more
Sourceยง

fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, C>)

Notifies this subscriber that an event has occurred.
Sourceยง

fn on_enter(&self, _id: &Id, _ctx: Context<'_, C>)

Notifies this subscriber that a span with the given ID was entered.
Sourceยง

fn on_exit(&self, _id: &Id, _ctx: Context<'_, C>)

Notifies this subscriber that the span with the given ID was exited.
Sourceยง

fn on_close(&self, _id: Id, _ctx: Context<'_, C>)

Notifies this subscriber that the span with the given ID has been closed.
Sourceยง

fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, C>)

Notifies this subscriber that a span ID has been cloned, and that the subscriber returned a different ID.
Sourceยง

fn and_then<S>(self, subscriber: S) -> Layered<S, Self, C> โ“˜
where S: Subscribe<C>, Self: Sized,

Composes this subscriber around the given collector, returning a Layered struct implementing Subscribe. Read more
Sourceยง

fn with_collector(self, inner: C) -> Layered<Self, C> โ“˜
where Self: Sized,

Composes this subscriber with the given collector, returning a Layered struct that implements Collect. Read more
Sourceยง

fn with_filter<F>(self, filter: F) -> Filtered<Self, F, C> โ“˜
where Self: Sized, F: Filter<C>,

Available on crate features registry and std only.
Combines self with a Filter, returning a Filtered subscriber. Read more
Sourceยง

fn boxed(self) -> Box<dyn Subscribe<C> + Send + Sync + 'static>
where Self: Sized + Subscribe<C> + Send + Sync + 'static, C: Collect,

Available on crate features alloc or std only.
Erases the type of this subscriber, returning a Boxed dyn Subscribe trait object. Read more

Auto Trait Implementationsยง

ยง

impl<C, F, R> Freeze for DynFilterFn<C, F, R>
where F: Freeze, R: Freeze,

ยง

impl<C, F, R> RefUnwindSafe for DynFilterFn<C, F, R>

ยง

impl<C, F, R> Send for DynFilterFn<C, F, R>
where F: Send, R: Send,

ยง

impl<C, F, R> Sync for DynFilterFn<C, F, R>
where F: Sync, R: Sync,

ยง

impl<C, F, R> Unpin for DynFilterFn<C, F, R>
where F: Unpin, R: Unpin,

ยง

impl<C, F, R> UnwindSafe for DynFilterFn<C, F, R>
where F: UnwindSafe, R: UnwindSafe,

Blanket Implementationsยง

Sourceยง

impl<T> Any for T
where T: 'static + ?Sized,

Sourceยง

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Sourceยง

impl<T> Borrow<T> for T
where T: ?Sized,

Sourceยง

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Sourceยง

impl<T> BorrowMut<T> for T
where T: ?Sized,

Sourceยง

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Sourceยง

impl<T> CloneToUninit for T
where T: Clone,

Sourceยง

unsafe fn clone_to_uninit(&self, dest: *mut u8)

๐Ÿ”ฌThis is a nightly-only experimental API. (clone_to_uninit #126799)
Performs copy-assignment from self to dest. Read more
Sourceยง

impl<F, S> FilterExt<S> for F
where F: Filter<S>,

Sourceยง

fn and<B>(self, other: B) -> And<Self, B, S> โ“˜
where Self: Sized, B: Filter<S>,

Available on crate features registry and std only.
Combines this Filter with another Filter s so that spans and events are enabled if and only if both filters return true. Read more
Sourceยง

fn or<B>(self, other: B) -> Or<Self, B, S> โ“˜
where Self: Sized, B: Filter<S>,

Available on crate features registry and std only.
Combines two Filters so that spans and events are enabled if either filter returns true. Read more
Sourceยง

fn not(self) -> Not<Self, S> โ“˜
where Self: Sized,

Available on crate features registry and std only.
Inverts self, returning a filter that enables spans and events only if self would not enable them. Read more
Sourceยง

fn boxed(self) -> Box<dyn Filter<S> + Send + Sync + 'static>
where Self: Sized + Send + Sync + 'static,

Available on crate features registry and std only.
Boxes self, erasing its concrete type. Read more
Sourceยง

impl<T> From<T> for T

Sourceยง

fn from(t: T) -> T

Returns the argument unchanged.

Sourceยง

impl<T> Instrument for T

Sourceยง

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Sourceยง

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Sourceยง

impl<T, U> Into<U> for T
where U: From<T>,

Sourceยง

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Sourceยง

impl<T> ToOwned for T
where T: Clone,

Sourceยง

type Owned = T

The resulting type after obtaining ownership.
Sourceยง

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Sourceยง

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Sourceยง

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Sourceยง

type Error = Infallible

The type returned in the event of a conversion error.
Sourceยง

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Sourceยง

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Sourceยง

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Sourceยง

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Sourceยง

impl<T> WithCollector for T

Sourceยง

fn with_collector<C>(self, collector: C) -> WithDispatch<Self>
where C: Into<Dispatch>,

Attaches the provided collector to this type, returning a WithDispatch wrapper. Read more
Sourceยง

fn with_current_collector(self) -> WithDispatch<Self>

Attaches the current default collector to this type, returning a WithDispatch wrapper. Read more