@@ -55,12 +55,16 @@ fn main() {
55
55
}
56
56
57
57
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
+
62
66
#[ cfg( feature = "otel" ) ]
63
- {
67
+ let telemetry = {
64
68
use std:: time:: Duration ;
65
69
66
70
use opentelemetry:: { global, KeyValue } ;
@@ -70,11 +74,9 @@ async fn maybe_trace_rustup() -> Result<utils::ExitCode> {
70
74
trace:: { self , Sampler } ,
71
75
Resource ,
72
76
} ;
73
- use tracing_subscriber:: { fmt, layer:: SubscriberExt , EnvFilter , Registry } ;
74
-
75
- let curr_process = process ( ) ;
76
77
77
78
global:: set_text_map_propagator ( TraceContextPropagator :: new ( ) ) ;
79
+
78
80
let tracer = opentelemetry_otlp:: new_pipeline ( )
79
81
. tracing ( )
80
82
. with_exporter (
@@ -89,23 +91,44 @@ async fn maybe_trace_rustup() -> Result<utils::ExitCode> {
89
91
)
90
92
. install_batch ( opentelemetry_sdk:: runtime:: Tokio ) ?;
91
93
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
107
129
}
108
130
131
+ // FIXME: Make `tracing::instrument` always run
109
132
#[ cfg_attr( feature = "otel" , tracing:: instrument) ]
110
133
async fn run_rustup ( ) -> Result < utils:: ExitCode > {
111
134
if let Ok ( dir) = process ( ) . var ( "RUSTUP_TRACE_DIR" ) {
0 commit comments