@@ -50,13 +50,15 @@ pub struct TelemetryInstance {
5050 metric_prefix : String ,
5151 logs_out : Option < Mutex < CoreLogsOut > > ,
5252 metrics : Option < Arc < dyn CoreMeter + ' static > > ,
53- trace_subscriber : Arc < dyn Subscriber + Send + Sync > ,
53+ /// The tracing subscriber which is associated with this telemetry instance. May be `None` if
54+ /// the user has not opted into any tracing configuration.
55+ trace_subscriber : Option < Arc < dyn Subscriber + Send + Sync > > ,
5456 attach_service_name : bool ,
5557}
5658
5759impl TelemetryInstance {
5860 fn new (
59- trace_subscriber : Arc < dyn Subscriber + Send + Sync > ,
61+ trace_subscriber : Option < Arc < dyn Subscriber + Send + Sync > > ,
6062 logs_out : Option < Mutex < CoreLogsOut > > ,
6163 metric_prefix : String ,
6264 metrics : Option < Arc < dyn CoreMeter + ' static > > ,
@@ -73,8 +75,8 @@ impl TelemetryInstance {
7375
7476 /// Return the trace subscriber associated with the telemetry options/instance. Can be used
7577 /// to manually set the default for a thread or globally using the `tracing` crate, or with
76- /// [set_trace_subscriber_for_current_thread]
77- pub fn trace_subscriber ( & self ) -> Arc < dyn Subscriber + Send + Sync > {
78+ /// [set_trace_subscriber_for_current_thread].
79+ pub fn trace_subscriber ( & self ) -> Option < Arc < dyn Subscriber + Send + Sync > > {
7880 self . trace_subscriber . clone ( )
7981 }
8082
@@ -172,7 +174,7 @@ pub fn telemetry_init(opts: TelemetryOptions) -> Result<TelemetryInstance, anyho
172174 let mut forward_layer = None ;
173175 // ===================================
174176
175- if let Some ( ref logger ) = opts. logging {
177+ let tracing_sub = opts. logging . map ( |logger| {
176178 match logger {
177179 Logger :: Console { filter } => {
178180 // This is silly dupe but can't be avoided without boxing.
@@ -206,18 +208,18 @@ pub fn telemetry_init(opts: TelemetryOptions) -> Result<TelemetryInstance, anyho
206208 forward_layer = Some ( export_layer. with_filter ( EnvFilter :: new ( filter) ) ) ;
207209 }
208210 } ;
209- } ;
211+ let reg = tracing_subscriber:: registry ( )
212+ . with ( console_pretty_layer)
213+ . with ( console_compact_layer)
214+ . with ( forward_layer) ;
210215
211- let reg = tracing_subscriber:: registry ( )
212- . with ( console_pretty_layer)
213- . with ( console_compact_layer)
214- . with ( forward_layer) ;
215-
216- #[ cfg( feature = "tokio-console" ) ]
217- let reg = reg. with ( console_subscriber:: spawn ( ) ) ;
216+ #[ cfg( feature = "tokio-console" ) ]
217+ let reg = reg. with ( console_subscriber:: spawn ( ) ) ;
218+ Arc :: new ( reg) as Arc < dyn Subscriber + Send + Sync >
219+ } ) ;
218220
219221 Ok ( TelemetryInstance :: new (
220- Arc :: new ( reg ) ,
222+ tracing_sub ,
221223 logs_out,
222224 opts. metric_prefix ,
223225 opts. metrics ,
@@ -234,7 +236,9 @@ pub fn telemetry_init_global(opts: TelemetryOptions) -> Result<(), anyhow::Error
234236 . is_ok ( )
235237 {
236238 let ti = telemetry_init ( opts) ?;
237- tracing:: subscriber:: set_global_default ( ti. trace_subscriber ( ) ) ?;
239+ if let Some ( ts) = ti. trace_subscriber ( ) {
240+ tracing:: subscriber:: set_global_default ( ts) ?;
241+ }
238242 }
239243 Ok ( ( ) )
240244}
0 commit comments