94
94
//.with_fallback_service_name(env!("CARGO_PKG_NAME"))
95
95
//.with_fallback_service_version(env!("CARGO_PKG_VERSION"))
96
96
. build ( ) ;
97
- let tracerprovider = otlp:: init_tracerprovider ( otel_rsrc, otlp:: identity) ?;
97
+ let tracer_provider = otlp:: init_tracerprovider ( otel_rsrc, otlp:: identity) ?;
98
98
// to not send trace somewhere, but continue to create and propagate,...
99
99
// then send them to `axum_tracing_opentelemetry::stdio::WriteNoWhere::default()`
100
100
// or to `std::io::stdout()` to print
@@ -107,20 +107,31 @@ where
107
107
init_propagator ( ) ?;
108
108
let layer = tracing_opentelemetry:: layer ( )
109
109
. with_error_records_to_exceptions ( true )
110
- . with_tracer ( tracerprovider . tracer ( "" ) ) ;
111
- global:: set_tracer_provider ( tracerprovider . clone ( ) ) ;
112
- Ok ( ( layer, TracingGuard { tracerprovider } ) )
110
+ . with_tracer ( tracer_provider . tracer ( "" ) ) ;
111
+ global:: set_tracer_provider ( tracer_provider . clone ( ) ) ;
112
+ Ok ( ( layer, TracingGuard { tracer_provider } ) )
113
113
}
114
114
115
+ /// On Drop of the `TracingGuard` instance,
116
+ /// the wrapped Tracer Provider is force to flush and to shutdown (ignoring error).
115
117
#[ must_use = "Recommend holding with 'let _guard = ' pattern to ensure final traces are sent to the server" ]
116
118
pub struct TracingGuard {
117
- tracerprovider : SdkTracerProvider ,
119
+ tracer_provider : SdkTracerProvider ,
120
+ }
121
+
122
+ impl TracingGuard {
123
+ /// the wrapped Tracer Provider
124
+ #[ must_use]
125
+ pub fn tracer_provider ( & self ) -> & impl TracerProvider {
126
+ & self . tracer_provider
127
+ }
118
128
}
119
129
120
130
impl Drop for TracingGuard {
121
131
fn drop ( & mut self ) {
122
132
#[ allow( unused_must_use) ]
123
- let _ = self . tracerprovider . force_flush ( ) ;
133
+ let _ = self . tracer_provider . force_flush ( ) ;
134
+ let _ = self . tracer_provider . shutdown ( ) ;
124
135
}
125
136
}
126
137
0 commit comments