Skip to content

Commit d640736

Browse files
committed
feat(rustup-init): (wip) use process().stderr() as a tracing output, pt. 2
1 parent 07d4166 commit d640736

File tree

1 file changed

+46
-23
lines changed

1 file changed

+46
-23
lines changed

src/bin/rustup-init.rs

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,16 @@ fn main() {
5555
}
5656

5757
async fn maybe_trace_rustup() -> Result<utils::ExitCode> {
58-
#[cfg(not(feature = "otel"))]
59-
{
60-
run_rustup().await
61-
}
58+
use tracing_subscriber::{
59+
filter::LevelFilter, layer::SubscriberExt, EnvFilter, Layer, Registry,
60+
};
61+
62+
let curr_process = process();
63+
let has_ansi = curr_process.stderr().is_a_tty();
64+
let maybe_rust_log_directives = curr_process.var_os("RUST_LOG").clone();
65+
6266
#[cfg(feature = "otel")]
63-
{
67+
let telemetry = {
6468
use std::time::Duration;
6569

6670
use opentelemetry::{global, KeyValue};
@@ -70,11 +74,9 @@ async fn maybe_trace_rustup() -> Result<utils::ExitCode> {
7074
trace::{self, Sampler},
7175
Resource,
7276
};
73-
use tracing_subscriber::{fmt, layer::SubscriberExt, EnvFilter, Registry};
74-
75-
let curr_process = process();
7677

7778
global::set_text_map_propagator(TraceContextPropagator::new());
79+
7880
let tracer = opentelemetry_otlp::new_pipeline()
7981
.tracing()
8082
.with_exporter(
@@ -89,23 +91,44 @@ async fn maybe_trace_rustup() -> Result<utils::ExitCode> {
8991
)
9092
.install_batch(opentelemetry_sdk::runtime::Tokio)?;
9193
let env_filter = EnvFilter::try_from_default_env().unwrap_or(EnvFilter::new("INFO"));
92-
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
93-
let subscriber = Registry::default()
94-
.with(
95-
fmt::layer()
96-
.with_ansi(curr_process.stderr().is_a_tty())
97-
.with_writer(move || curr_process.stderr()),
98-
)
99-
.with(env_filter)
100-
.with(telemetry);
101-
tracing::subscriber::set_global_default(subscriber)?;
102-
let result = run_rustup().await;
103-
// We're tracing, so block until all spans are exported.
104-
opentelemetry::global::shutdown_tracer_provider();
105-
result
106-
}
94+
tracing_opentelemetry::layer()
95+
.with_tracer(tracer)
96+
.with_filter(env_filter)
97+
};
98+
let console_logger = {
99+
let logger = tracing_subscriber::fmt::layer()
100+
.with_writer(move || curr_process.stderr())
101+
.with_ansi(has_ansi);
102+
if let Some(directives) = maybe_rust_log_directives {
103+
let env_filter = EnvFilter::builder()
104+
.with_default_directive(LevelFilter::INFO.into())
105+
.parse_lossy(directives.to_string_lossy());
106+
logger.compact().with_filter(env_filter).boxed()
107+
} else {
108+
let env_filter = EnvFilter::new("DEBUG");
109+
// FIXME: Add "classical" formatting
110+
logger.with_filter(env_filter).boxed()
111+
}
112+
};
113+
let subscriber = {
114+
#[cfg(feature = "otel")]
115+
{
116+
Registry::default().with(console_logger).with(telemetry)
117+
}
118+
#[cfg(not(feature = "otel"))]
119+
{
120+
Registry::default().with(console_logger)
121+
}
122+
};
123+
tracing::subscriber::set_global_default(subscriber)?;
124+
let result = run_rustup().await;
125+
// We're tracing, so block until all spans are exported.
126+
#[cfg(feature = "otel")]
127+
opentelemetry::global::shutdown_tracer_provider();
128+
result
107129
}
108130

131+
// FIXME: Make `tracing::instrument` always run
109132
#[cfg_attr(feature = "otel", tracing::instrument)]
110133
async fn run_rustup() -> Result<utils::ExitCode> {
111134
if let Ok(dir) = process().var("RUSTUP_TRACE_DIR") {

0 commit comments

Comments
 (0)