mirror of
https://github.com/tokio-rs/tracing.git
synced 2025-09-30 06:20:38 +00:00

## Motivation As discussed in #383 , adds the new `set_default` method. ## Solution * Add `tracing::subscriber::set_default` which sets the default subscriber and returns a drop guard. This drop guard will reset the dispatch on drop. * Add `tracing_core::dispatcher::set_default` method which sets the default dispatch and returns a drop guard. * Update `tracing_core::dispatcher::with_default` method to use the new `tracing_core::dispatcher::set_default` method. * Add test to confirm expected behavior Fixes: #383
35 lines
894 B
Rust
35 lines
894 B
Rust
mod common;
|
|
|
|
use common::*;
|
|
use tracing_core::dispatcher::*;
|
|
#[test]
|
|
fn global_dispatch() {
|
|
set_global_default(Dispatch::new(TestSubscriberA)).expect("global dispatch set failed");
|
|
get_default(|current| {
|
|
assert!(
|
|
current.is::<TestSubscriberA>(),
|
|
"global dispatch get failed"
|
|
)
|
|
});
|
|
|
|
#[cfg(feature = "std")]
|
|
with_default(&Dispatch::new(TestSubscriberB), || {
|
|
get_default(|current| {
|
|
assert!(
|
|
current.is::<TestSubscriberB>(),
|
|
"thread-local override of global dispatch failed"
|
|
)
|
|
});
|
|
});
|
|
|
|
get_default(|current| {
|
|
assert!(
|
|
current.is::<TestSubscriberA>(),
|
|
"reset to global override failed"
|
|
)
|
|
});
|
|
|
|
set_global_default(Dispatch::new(TestSubscriberA))
|
|
.expect_err("double global dispatch set succeeded");
|
|
}
|