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

# 0.3.1 (Oct 25, 2021) This release fixes a few issues related to feature flagging. ### Fixed - **time**: Compilation error when enabling the "time" feature flag without also enabling the "local-time" feature flag ([#1685]) - **registry**: Unused method warnings when the "std" feature is enabled but the "registry" feature is disabled ([#1686]) [#1685]: https://github.com/tokio-rs/tracing/pull/1685 [#1686]: https://github.com/tokio-rs/tracing/pull/1686
219 lines
8.1 KiB
Rust
219 lines
8.1 KiB
Rust
//! Utilities for implementing and composing [`tracing`] subscribers.
|
|
//!
|
|
//! [`tracing`] is a framework for instrumenting Rust programs to collect
|
|
//! scoped, structured, and async-aware diagnostics. The [`Subscriber`] trait
|
|
//! represents the functionality necessary to collect this trace data. This
|
|
//! crate contains tools for composing subscribers out of smaller units of
|
|
//! behaviour, and batteries-included implementations of common subscriber
|
|
//! functionality.
|
|
//!
|
|
//! `tracing-subscriber` is intended for use by both `Subscriber` authors and
|
|
//! application authors using `tracing` to instrument their applications.
|
|
//!
|
|
//! *Compiler support: [requires `rustc` 1.42+][msrv]*
|
|
//!
|
|
//! [msrv]: #supported-rust-versions
|
|
//!
|
|
//! ## `Layer`s and `Filter`s
|
|
//!
|
|
//! The most important component of the `tracing-subscriber` API is the
|
|
//! [`Layer`] trait, which provides a composable abstraction for building
|
|
//! [`Subscriber`]s. Like the [`Subscriber`] trait, a [`Layer`] defines a
|
|
//! particular behavior for collecting trace data. Unlike [`Subscriber`]s,
|
|
//! which implement a *complete* strategy for how trace data is collected,
|
|
//! [`Layer`]s provide *modular* implementations of specific behaviors.
|
|
//! Therefore, they can be [composed together] to form a [`Subscriber`] which is
|
|
//! capable of recording traces in a variety of ways. See the [`layer` module's
|
|
//! documentation][layer] for details on using [`Layer`]s.
|
|
//!
|
|
//! In addition, the [`Filter`] trait defines an interface for filtering what
|
|
//! spans and events are recorded by a particular layer. This allows different
|
|
//! [`Layer`]s to handle separate subsets of the trace data emitted by a
|
|
//! program. See the [documentation on per-layer filtering][plf] for more
|
|
//! information on using [`Filter`]s.
|
|
//!
|
|
//! [`Layer`]: crate::layer::Layer
|
|
//! [composed together]: crate::layer#composing-layers
|
|
//! [layer]: crate::layer
|
|
//! [`Filter`]: crate::layer::Filter
|
|
//! [plf]: crate::layer#per-layer-filtering
|
|
//!
|
|
//! ## Included Subscribers
|
|
//!
|
|
//! The following `Subscriber`s are provided for application authors:
|
|
//!
|
|
//! - [`fmt`] - Formats and logs tracing data (requires the `fmt` feature flag)
|
|
//!
|
|
//! ## Feature Flags
|
|
//!
|
|
//! - `std`: Enables APIs that depend on the on the Rust standard library
|
|
//! (enabled by default).
|
|
//! - `alloc`: Depend on [`liballoc`] (enabled by "std").
|
|
//! - `env-filter`: Enables the [`EnvFilter`] type, which implements filtering
|
|
//! similar to the [`env_logger` crate]. **Requires "std"**.
|
|
//! - `fmt`: Enables the [`fmt`] module, which provides a subscriber
|
|
//! implementation for printing formatted representations of trace events.
|
|
//! Enabled by default. **Requires "std"**.
|
|
//! - `ansi`: Enables `fmt` support for ANSI terminal colors. Enabled by
|
|
//! default.
|
|
//! - `registry`: enables the [`registry`] module. Enabled by default.
|
|
//! **Requires "std"**.
|
|
//! - `json`: Enables `fmt` support for JSON output. In JSON output, the ANSI
|
|
//! feature does nothing. **Requires "fmt" and "std"**.
|
|
//! - [`local-time`]: Enables local time formatting when using the [`time`
|
|
//! crate]'s timestamp formatters with the `fmt` subscriber.
|
|
//!
|
|
//! ### Optional Dependencies
|
|
//!
|
|
//! - [`tracing-log`]: Enables better formatting for events emitted by `log`
|
|
//! macros in the `fmt` subscriber. Enabled by default.
|
|
//! - [`time`]: Enables support for using the [`time` crate] for timestamp
|
|
//! formatting in the `fmt` subscriber.
|
|
//! - [`smallvec`]: Causes the `EnvFilter` type to use the `smallvec` crate (rather
|
|
//! than `Vec`) as a performance optimization. Enabled by default.
|
|
//! - [`parking_lot`]: Use the `parking_lot` crate's `RwLock` implementation
|
|
//! rather than the Rust standard library's implementation.
|
|
//!
|
|
//! ### `no_std` Support
|
|
//!
|
|
//! In embedded systems and other bare-metal applications, `tracing` can be
|
|
//! used without requiring the Rust standard library, although some features are
|
|
//! disabled. Although most of the APIs provided by `tracing-subscriber`, such
|
|
//! as [`fmt`] and [`EnvFilter`], require the standard library, some
|
|
//! functionality, such as the [`Subscriber`] trait, can still be used in
|
|
//! `no_std` environments.
|
|
//!
|
|
//! The dependency on the standard library is controlled by two crate feature
|
|
//! flags, "std", which enables the dependency on [`libstd`], and "alloc", which
|
|
//! enables the dependency on [`liballoc`] (and is enabled by the "std"
|
|
//! feature). These features are enabled by default, but `no_std` users can
|
|
//! disable them using:
|
|
//!
|
|
//! ```toml
|
|
//! # Cargo.toml
|
|
//! tracing-subscriber = { version = "0.3", default-features = false }
|
|
//! ```
|
|
//!
|
|
//! Additional APIs are available when [`liballoc`] is available. To enable
|
|
//! `liballoc` but not `std`, use:
|
|
//!
|
|
//! ```toml
|
|
//! # Cargo.toml
|
|
//! tracing-subscriber = { version = "0.3", default-features = false, features = ["alloc"] }
|
|
//! ```
|
|
//!
|
|
//! ## Supported Rust Versions
|
|
//!
|
|
//! Tracing is built against the latest stable release. The minimum supported
|
|
//! version is 1.42. The current Tracing version is not guaranteed to build on
|
|
//! Rust versions earlier than the minimum supported version.
|
|
//!
|
|
//! Tracing follows the same compiler support policies as the rest of the Tokio
|
|
//! project. The current stable Rust compiler and the three most recent minor
|
|
//! versions before it will always be supported. For example, if the current
|
|
//! stable compiler version is 1.45, the minimum supported version will not be
|
|
//! increased past 1.42, three minor versions prior. Increasing the minimum
|
|
//! supported compiler version is not considered a semver breaking change as
|
|
//! long as doing so complies with this policy.
|
|
//!
|
|
//! [`tracing`]: https://docs.rs/tracing/latest/tracing/
|
|
//! [`Subscriber`]: https://docs.rs/tracing-core/latest/tracing_core/subscriber/trait.Subscriber.html
|
|
//! [`EnvFilter`]: filter/struct.EnvFilter.html
|
|
//! [`fmt`]: fmt/index.html
|
|
//! [`tracing-log`]: https://crates.io/crates/tracing-log
|
|
//! [`smallvec`]: https://crates.io/crates/smallvec
|
|
//! [`env_logger` crate]: https://crates.io/crates/env_logger
|
|
//! [`parking_lot`]: https://crates.io/crates/parking_lot
|
|
//! [`time` crate]: https://crates.io/crates/time
|
|
//! [`liballoc`]: https://doc.rust-lang.org/alloc/index.html
|
|
#![doc(html_root_url = "https://docs.rs/tracing-subscriber/0.3.1")]
|
|
#![doc(
|
|
html_logo_url = "https://raw.githubusercontent.com/tokio-rs/tracing/master/assets/logo-type.png",
|
|
issue_tracker_base_url = "https://github.com/tokio-rs/tracing/issues/"
|
|
)]
|
|
#![cfg_attr(
|
|
docsrs,
|
|
// Allows displaying cfgs/feature flags in the documentation.
|
|
feature(doc_cfg),
|
|
// Allows adding traits to RustDoc's list of "notable traits"
|
|
feature(doc_notable_trait),
|
|
// Fail the docs build if any intra-docs links are broken
|
|
deny(rustdoc::broken_intra_doc_links),
|
|
)]
|
|
#![warn(
|
|
missing_debug_implementations,
|
|
missing_docs,
|
|
rust_2018_idioms,
|
|
unreachable_pub,
|
|
bad_style,
|
|
const_err,
|
|
dead_code,
|
|
improper_ctypes,
|
|
non_shorthand_field_patterns,
|
|
no_mangle_generic_items,
|
|
overflowing_literals,
|
|
path_statements,
|
|
patterns_in_fns_without_body,
|
|
private_in_public,
|
|
unconditional_recursion,
|
|
unused,
|
|
unused_allocation,
|
|
unused_comparisons,
|
|
unused_parens,
|
|
while_true
|
|
)]
|
|
// Using struct update syntax when a struct has no additional fields avoids
|
|
// a potential source change if additional fields are added to the struct in the
|
|
// future, reducing diff noise. Allow this even though clippy considers it
|
|
// "needless".
|
|
#![allow(clippy::needless_update)]
|
|
#![cfg_attr(not(feature = "std"), no_std)]
|
|
|
|
#[cfg(feature = "alloc")]
|
|
extern crate alloc;
|
|
|
|
#[macro_use]
|
|
mod macros;
|
|
|
|
pub mod field;
|
|
pub mod filter;
|
|
pub mod prelude;
|
|
pub mod registry;
|
|
|
|
pub mod layer;
|
|
pub mod util;
|
|
|
|
feature! {
|
|
#![feature = "std"]
|
|
pub mod reload;
|
|
pub(crate) mod sync;
|
|
}
|
|
|
|
feature! {
|
|
#![all(feature = "fmt", feature = "std")]
|
|
pub mod fmt;
|
|
pub use fmt::fmt;
|
|
pub use fmt::Subscriber as FmtSubscriber;
|
|
}
|
|
|
|
feature! {
|
|
#![all(feature = "env-filter", feature = "std")]
|
|
pub use filter::EnvFilter;
|
|
}
|
|
|
|
pub use layer::Layer;
|
|
|
|
feature! {
|
|
#![all(feature = "registry", feature = "std")]
|
|
pub use registry::Registry;
|
|
|
|
///
|
|
pub fn registry() -> Registry {
|
|
Registry::default()
|
|
}
|
|
}
|
|
|
|
mod sealed {
|
|
pub trait Sealed<A = ()> {}
|
|
}
|