summaryrefslogtreecommitdiffstats
path: root/vendor/tracing-subscriber-0.3.3/tests/layer_filters/targets.rs
blob: c8133044b1b6cae524f36361b985d05fde8ffd27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use super::*;
use tracing_subscriber::{
    filter::{filter_fn, Targets},
    prelude::*,
};

#[test]
#[cfg_attr(not(feature = "tracing-log"), ignore)]
fn log_events() {
    // Reproduces https://github.com/tokio-rs/tracing/issues/1563
    mod inner {
        pub(super) const MODULE_PATH: &str = module_path!();

        #[tracing::instrument]
        pub(super) fn logs() {
            log::debug!("inner");
        }
    }

    let filter = Targets::new()
        .with_default(LevelFilter::DEBUG)
        .with_target(inner::MODULE_PATH, LevelFilter::WARN);

    let layer =
        tracing_subscriber::layer::Identity::new().with_filter(filter_fn(move |_meta| true));

    let _guard = tracing_subscriber::registry()
        .with(filter)
        .with(layer)
        .set_default();

    inner::logs();
}

#[test]
fn inner_layer_short_circuits() {
    // This test ensures that when a global filter short-circuits `Interest`
    // evaluation, we aren't left with a "dirty" per-layer filter state.

    let (layer, handle) = layer::mock()
        .event(event::msg("hello world"))
        .done()
        .run_with_handle();

    let filter = Targets::new().with_target("magic_target", LevelFilter::DEBUG);

    let _guard = tracing_subscriber::registry()
        // Note: we don't just use a `LevelFilter` for the global filter here,
        // because it will just return a max level filter, and the chain of
        // `register_callsite` calls that would trigger the bug never happens...
        .with(filter::filter_fn(|meta| meta.level() <= &Level::INFO))
        .with(layer.with_filter(filter))
        .set_default();

    tracing::debug!("skip me please!");
    tracing::info!(target: "magic_target", "hello world");

    handle.assert_finished();
}