@@ -55,12 +55,16 @@ fn main() {
5555}
5656
5757async 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) ]
110133async fn run_rustup ( ) -> Result < utils:: ExitCode > {
111134 if let Ok ( dir) = process ( ) . var ( "RUSTUP_TRACE_DIR" ) {
0 commit comments