diff options
| author | 许杰友 Jieyou Xu (Joe) <39484203+jieyouxu@users.noreply.github.com> | 2025-01-12 11:42:43 +0800 |
|---|---|---|
| committer | 许杰友 Jieyou Xu (Joe) <39484203+jieyouxu@users.noreply.github.com> | 2025-01-13 08:16:18 +0800 |
| commit | 1307c950c4c84a71f9abe692418d9e473d9e908b (patch) | |
| tree | 57c20734051460a924dd9fcb9e1a20b7188c2be5 | |
| parent | 97d59c5af371444dd162b1c83bcf34a5e9ae3228 (diff) | |
| download | rust-1307c950c4c84a71f9abe692418d9e473d9e908b.tar.gz rust-1307c950c4c84a71f9abe692418d9e473d9e908b.zip | |
bootstrap: add `tracing` and `tracing-tree` based tracing setup
| -rw-r--r-- | src/bootstrap/src/bin/main.rs | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/bootstrap/src/bin/main.rs b/src/bootstrap/src/bin/main.rs index ee813de1c9e..b6552774195 100644 --- a/src/bootstrap/src/bin/main.rs +++ b/src/bootstrap/src/bin/main.rs @@ -15,8 +15,18 @@ use bootstrap::{ human_readable_changes, t, }; use build_helper::ci::CiEnv; - +#[cfg(feature = "tracing")] +use tracing::*; +#[cfg(feature = "tracing")] +use tracing_subscriber::EnvFilter; +#[cfg(feature = "tracing")] +use tracing_subscriber::prelude::*; + +#[cfg_attr(feature = "tracing", instrument(level = "trace", name = "main"))] fn main() { + #[cfg(feature = "tracing")] + setup_tracing(); + let args = env::args().skip(1).collect::<Vec<_>>(); if Flags::try_parse_verbose_help(&args) { @@ -187,3 +197,28 @@ fn check_version(config: &Config) -> Option<String> { Some(msg) } + +// # Note on `tracing` usage in bootstrap +// +// Due to the conditional compilation via the `tracing` cargo feature, this means that `tracing` +// usages in bootstrap need to be also gated behind the `tracing` feature: +// +// - `tracing` macros (like `trace!`) and anything from `tracing`, `tracing_subscriber` and +// `tracing-tree` will need to be gated by `#[cfg(feature = "tracing")]`. +// - `tracing`'s `#[instrument(..)]` macro will need to be gated like `#![cfg_attr(feature = +// "tracing", instrument(..))]`. +#[cfg(feature = "tracing")] +fn setup_tracing() { + let filter = EnvFilter::from_env("BOOTSTRAP_TRACING"); + let layer = tracing_tree::HierarchicalLayer::default() + .with_writer(std::io::stderr) + .with_ansi(true) + .with_targets(true) + .with_bracketed_fields(true) + .with_indent_amount(2) + .with_indent_lines(true); + let subscriber = tracing_subscriber::registry().with(filter).with(layer); + + tracing::subscriber::set_global_default(subscriber).unwrap(); + trace!("tracing subscriber setup"); +} |
