1 | use super::*; |
2 | use tracing_mock::{event, expect, layer::MockLayer}; |
3 | |
4 | #[test] |
5 | fn filters_span_scopes() { |
6 | let (debug_layer, debug_handle) = layer::named("debug" ) |
7 | .enter(expect::span().at_level(Level::DEBUG)) |
8 | .enter(expect::span().at_level(Level::INFO)) |
9 | .enter(expect::span().at_level(Level::WARN)) |
10 | .enter(expect::span().at_level(Level::ERROR)) |
11 | .event(event::msg("hello world" ).in_scope(vec![ |
12 | expect::span().at_level(Level::ERROR), |
13 | expect::span().at_level(Level::WARN), |
14 | expect::span().at_level(Level::INFO), |
15 | expect::span().at_level(Level::DEBUG), |
16 | ])) |
17 | .exit(expect::span().at_level(Level::ERROR)) |
18 | .exit(expect::span().at_level(Level::WARN)) |
19 | .exit(expect::span().at_level(Level::INFO)) |
20 | .exit(expect::span().at_level(Level::DEBUG)) |
21 | .only() |
22 | .run_with_handle(); |
23 | let (info_layer, info_handle) = layer::named("info" ) |
24 | .enter(expect::span().at_level(Level::INFO)) |
25 | .enter(expect::span().at_level(Level::WARN)) |
26 | .enter(expect::span().at_level(Level::ERROR)) |
27 | .event(event::msg("hello world" ).in_scope(vec![ |
28 | expect::span().at_level(Level::ERROR), |
29 | expect::span().at_level(Level::WARN), |
30 | expect::span().at_level(Level::INFO), |
31 | ])) |
32 | .exit(expect::span().at_level(Level::ERROR)) |
33 | .exit(expect::span().at_level(Level::WARN)) |
34 | .exit(expect::span().at_level(Level::INFO)) |
35 | .only() |
36 | .run_with_handle(); |
37 | let (warn_layer, warn_handle) = layer::named("warn" ) |
38 | .enter(expect::span().at_level(Level::WARN)) |
39 | .enter(expect::span().at_level(Level::ERROR)) |
40 | .event(event::msg("hello world" ).in_scope(vec![ |
41 | expect::span().at_level(Level::ERROR), |
42 | expect::span().at_level(Level::WARN), |
43 | ])) |
44 | .exit(expect::span().at_level(Level::ERROR)) |
45 | .exit(expect::span().at_level(Level::WARN)) |
46 | .only() |
47 | .run_with_handle(); |
48 | |
49 | let _subscriber = tracing_subscriber::registry() |
50 | .with(debug_layer.with_filter(LevelFilter::DEBUG)) |
51 | .with(info_layer.with_filter(LevelFilter::INFO)) |
52 | .with(warn_layer.with_filter(LevelFilter::WARN)) |
53 | .set_default(); |
54 | |
55 | { |
56 | let _trace = tracing::trace_span!("my_span" ).entered(); |
57 | let _debug = tracing::debug_span!("my_span" ).entered(); |
58 | let _info = tracing::info_span!("my_span" ).entered(); |
59 | let _warn = tracing::warn_span!("my_span" ).entered(); |
60 | let _error = tracing::error_span!("my_span" ).entered(); |
61 | tracing::error!("hello world" ); |
62 | } |
63 | |
64 | debug_handle.assert_finished(); |
65 | info_handle.assert_finished(); |
66 | warn_handle.assert_finished(); |
67 | } |
68 | |
69 | #[test] |
70 | fn filters_interleaved_span_scopes() { |
71 | fn target_layer(target: &'static str) -> (MockLayer, subscriber::MockHandle) { |
72 | layer::named(format!("target_{}" , target)) |
73 | .enter(expect::span().with_target(target)) |
74 | .enter(expect::span().with_target(target)) |
75 | .event(event::msg("hello world" ).in_scope(vec![ |
76 | expect::span().with_target(target), |
77 | expect::span().with_target(target), |
78 | ])) |
79 | .event( |
80 | event::msg("hello to my target" ) |
81 | .in_scope(vec![ |
82 | expect::span().with_target(target), |
83 | expect::span().with_target(target), |
84 | ]) |
85 | .with_target(target), |
86 | ) |
87 | .exit(expect::span().with_target(target)) |
88 | .exit(expect::span().with_target(target)) |
89 | .only() |
90 | .run_with_handle() |
91 | } |
92 | |
93 | let (a_layer, a_handle) = target_layer("a" ); |
94 | let (b_layer, b_handle) = target_layer("b" ); |
95 | let (all_layer, all_handle) = layer::named("all" ) |
96 | .enter(expect::span().with_target("b" )) |
97 | .enter(expect::span().with_target("a" )) |
98 | .event(event::msg("hello world" ).in_scope(vec![ |
99 | expect::span().with_target("a" ), |
100 | expect::span().with_target("b" ), |
101 | ])) |
102 | .exit(expect::span().with_target("a" )) |
103 | .exit(expect::span().with_target("b" )) |
104 | .only() |
105 | .run_with_handle(); |
106 | |
107 | let _subscriber = tracing_subscriber::registry() |
108 | .with(all_layer.with_filter(LevelFilter::INFO)) |
109 | .with(a_layer.with_filter(filter::filter_fn(|meta| { |
110 | let target = meta.target(); |
111 | target == "a" || target == module_path!() |
112 | }))) |
113 | .with(b_layer.with_filter(filter::filter_fn(|meta| { |
114 | let target = meta.target(); |
115 | target == "b" || target == module_path!() |
116 | }))) |
117 | .set_default(); |
118 | |
119 | { |
120 | let _a1 = tracing::trace_span!(target: "a" , "a/trace" ).entered(); |
121 | let _b1 = tracing::info_span!(target: "b" , "b/info" ).entered(); |
122 | let _a2 = tracing::info_span!(target: "a" , "a/info" ).entered(); |
123 | let _b2 = tracing::trace_span!(target: "b" , "b/trace" ).entered(); |
124 | tracing::info!("hello world" ); |
125 | tracing::debug!(target: "a" , "hello to my target" ); |
126 | tracing::debug!(target: "b" , "hello to my target" ); |
127 | } |
128 | |
129 | a_handle.assert_finished(); |
130 | b_handle.assert_finished(); |
131 | all_handle.assert_finished(); |
132 | } |
133 | |