1//! Collects and records trace data.
2pub use tracing_core::subscriber::*;
3
4#[cfg(feature = "std")]
5#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
6pub use tracing_core::dispatcher::DefaultGuard;
7
8/// Sets this [`Subscriber`] as the default for the current thread for the
9/// duration of a closure.
10///
11/// The default subscriber is used when creating a new [`Span`] or
12/// [`Event`].
13///
14///
15/// [`Span`]: super::span::Span
16/// [`Subscriber`]: super::subscriber::Subscriber
17/// [`Event`]: super::event::Event
18#[cfg(feature = "std")]
19#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
20pub fn with_default<T, S>(subscriber: S, f: impl FnOnce() -> T) -> T
21where
22 S: Subscriber + Send + Sync + 'static,
23{
24 crate::dispatcher::with_default(&crate::Dispatch::new(subscriber), f)
25}
26
27/// Sets this subscriber as the global default for the duration of the entire program.
28/// Will be used as a fallback if no thread-local subscriber has been set in a thread (using `with_default`.)
29///
30/// Can only be set once; subsequent attempts to set the global default will fail.
31/// Returns whether the initialization was successful.
32///
33/// Note: Libraries should *NOT* call `set_global_default()`! That will cause conflicts when
34/// executables try to set them later.
35///
36/// [span]: super::span
37/// [`Subscriber`]: super::subscriber::Subscriber
38/// [`Event`]: super::event::Event
39pub fn set_global_default<S>(subscriber: S) -> Result<(), SetGlobalDefaultError>
40where
41 S: Subscriber + Send + Sync + 'static,
42{
43 crate::dispatcher::set_global_default(crate::Dispatch::new(subscriber))
44}
45
46/// Sets the [`Subscriber`] as the default for the current thread for the
47/// duration of the lifetime of the returned [`DefaultGuard`].
48///
49/// The default subscriber is used when creating a new [`Span`] or [`Event`].
50///
51/// [`Span`]: super::span::Span
52/// [`Subscriber`]: super::subscriber::Subscriber
53/// [`Event`]: super::event::Event
54/// [`DefaultGuard`]: super::dispatcher::DefaultGuard
55#[cfg(feature = "std")]
56#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
57#[must_use = "Dropping the guard unregisters the subscriber."]
58pub fn set_default<S>(subscriber: S) -> DefaultGuard
59where
60 S: Subscriber + Send + Sync + 'static,
61{
62 crate::dispatcher::set_default(&crate::Dispatch::new(subscriber))
63}
64
65pub use tracing_core::dispatcher::SetGlobalDefaultError;
66