mirror of
https://github.com/tokio-rs/tracing.git
synced 2025-10-02 15:24:47 +00:00

This branch renames `Filter` to `EnvFilter` and deprecates the previous name, as suggested in https://github.com/tokio-rs/tracing/pull/336#pullrequestreview-286356811. This should make the difference between an `EnvFilter` and a `LevelFilter` clearer. The `filter` feature has also been deprecated in favor of `env-filter`. Co-Authored-By: Benjamin Saunders <ben.e.saunders@gmail.com> Signed-off-by: Eliza Weisman <eliza@buoyant.io>
158 lines
5.3 KiB
Rust
158 lines
5.3 KiB
Rust
mod support;
|
|
use self::support::*;
|
|
use tracing::{self, subscriber::with_default, Level};
|
|
use tracing_subscriber::{filter::EnvFilter, prelude::*};
|
|
|
|
#[test]
|
|
fn level_filter_event() {
|
|
let filter: EnvFilter = "info".parse().expect("filter should parse");
|
|
let (subscriber, finished) = subscriber::mock()
|
|
.event(event::mock().at_level(Level::INFO))
|
|
.event(event::mock().at_level(Level::WARN))
|
|
.event(event::mock().at_level(Level::ERROR))
|
|
.done()
|
|
.run_with_handle();
|
|
let subscriber = subscriber.with(filter);
|
|
|
|
with_default(subscriber, || {
|
|
tracing::trace!("this should be disabled");
|
|
tracing::info!("this shouldn't be");
|
|
tracing::debug!(target: "foo", "this should also be disabled");
|
|
tracing::warn!(target: "foo", "this should be enabled");
|
|
tracing::error!("this should be enabled too");
|
|
});
|
|
|
|
finished.assert_finished();
|
|
}
|
|
|
|
#[test]
|
|
fn same_name_spans() {
|
|
let filter: EnvFilter = "[foo{bar}]=trace,[foo{baz}]=trace"
|
|
.parse()
|
|
.expect("filter should parse");
|
|
let (subscriber, finished) = subscriber::mock()
|
|
.new_span(
|
|
span::mock()
|
|
.named("foo")
|
|
.at_level(Level::TRACE)
|
|
.with_field(field::mock("bar")),
|
|
)
|
|
.new_span(
|
|
span::mock()
|
|
.named("foo")
|
|
.at_level(Level::TRACE)
|
|
.with_field(field::mock("baz")),
|
|
)
|
|
.done()
|
|
.run_with_handle();
|
|
let subscriber = subscriber.with(filter);
|
|
with_default(subscriber, || {
|
|
tracing::trace_span!("foo", bar = 1);
|
|
tracing::trace_span!("foo", baz = 1);
|
|
});
|
|
|
|
finished.assert_finished();
|
|
}
|
|
|
|
#[test]
|
|
fn level_filter_event_with_target() {
|
|
let filter: EnvFilter = "info,stuff=debug".parse().expect("filter should parse");
|
|
let (subscriber, finished) = subscriber::mock()
|
|
.event(event::mock().at_level(Level::INFO))
|
|
.event(event::mock().at_level(Level::DEBUG).with_target("stuff"))
|
|
.event(event::mock().at_level(Level::WARN).with_target("stuff"))
|
|
.event(event::mock().at_level(Level::ERROR))
|
|
.event(event::mock().at_level(Level::ERROR).with_target("stuff"))
|
|
.done()
|
|
.run_with_handle();
|
|
let subscriber = subscriber.with(filter);
|
|
|
|
with_default(subscriber, || {
|
|
tracing::trace!("this should be disabled");
|
|
tracing::info!("this shouldn't be");
|
|
tracing::debug!(target: "stuff", "this should be enabled");
|
|
tracing::debug!("but this shouldn't");
|
|
tracing::trace!(target: "stuff", "and neither should this");
|
|
tracing::warn!(target: "stuff", "this should be enabled");
|
|
tracing::error!("this should be enabled too");
|
|
tracing::error!(target: "stuff", "this should be enabled also");
|
|
});
|
|
|
|
finished.assert_finished();
|
|
}
|
|
|
|
#[test]
|
|
fn span_name_filter_is_dynamic() {
|
|
let filter: EnvFilter = "info,[cool_span]=debug"
|
|
.parse()
|
|
.expect("filter should parse");
|
|
let (subscriber, finished) = subscriber::mock()
|
|
.event(event::mock().at_level(Level::INFO))
|
|
.enter(span::mock().named("cool_span"))
|
|
.event(event::mock().at_level(Level::DEBUG))
|
|
.enter(span::mock().named("uncool_span"))
|
|
.event(event::mock().at_level(Level::WARN))
|
|
.event(event::mock().at_level(Level::DEBUG))
|
|
.exit(span::mock().named("uncool_span"))
|
|
.exit(span::mock().named("cool_span"))
|
|
.enter(span::mock().named("uncool_span"))
|
|
.event(event::mock().at_level(Level::WARN))
|
|
.event(event::mock().at_level(Level::ERROR))
|
|
.exit(span::mock().named("uncool_span"))
|
|
.done()
|
|
.run_with_handle();
|
|
let subscriber = subscriber.with(filter);
|
|
|
|
with_default(subscriber, || {
|
|
tracing::trace!("this should be disabled");
|
|
tracing::info!("this shouldn't be");
|
|
let cool_span = tracing::info_span!("cool_span");
|
|
let uncool_span = tracing::info_span!("uncool_span");
|
|
|
|
{
|
|
let _enter = cool_span.enter();
|
|
tracing::debug!("i'm a cool event");
|
|
tracing::trace!("i'm cool, but not cool enough");
|
|
let _enter2 = uncool_span.enter();
|
|
tracing::warn!("warning: extremely cool!");
|
|
tracing::debug!("i'm still cool");
|
|
}
|
|
|
|
let _enter = uncool_span.enter();
|
|
tracing::warn!("warning: not that cool");
|
|
tracing::trace!("im not cool enough");
|
|
tracing::error!("uncool error");
|
|
});
|
|
|
|
finished.assert_finished();
|
|
}
|
|
|
|
#[test]
|
|
fn field_filter_events() {
|
|
let filter: EnvFilter = "[{thing}]=debug".parse().expect("filter should parse");
|
|
let (subscriber, finished) = subscriber::mock()
|
|
.event(
|
|
event::mock()
|
|
.at_level(Level::INFO)
|
|
.with_fields(field::mock("thing")),
|
|
)
|
|
.event(
|
|
event::mock()
|
|
.at_level(Level::DEBUG)
|
|
.with_fields(field::mock("thing")),
|
|
)
|
|
.done()
|
|
.run_with_handle();
|
|
let subscriber = subscriber.with(filter);
|
|
|
|
with_default(subscriber, || {
|
|
tracing::trace!(disabled = true);
|
|
tracing::info!("also disabled");
|
|
tracing::info!(thing = 1);
|
|
tracing::debug!(thing = 2);
|
|
tracing::trace!(thing = 3);
|
|
});
|
|
|
|
finished.assert_finished();
|
|
}
|