@@ -17,6 +17,8 @@ use std::process::exit;
1717 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1818 *
1919 */
20+ use opentelemetry:: trace:: TracerProvider as _;
21+ use opentelemetry_sdk:: trace:: SdkTracerProvider ;
2022#[ cfg( feature = "kafka" ) ]
2123use parseable:: connectors;
2224use parseable:: {
@@ -27,13 +29,14 @@ use tokio::signal::ctrl_c;
2729use tokio:: sync:: oneshot;
2830use tracing:: Level ;
2931use tracing:: { info, warn} ;
32+ use tracing_subscriber:: Layer as _;
3033use tracing_subscriber:: layer:: SubscriberExt ;
3134use tracing_subscriber:: util:: SubscriberInitExt ;
3235use tracing_subscriber:: { EnvFilter , Registry , fmt} ;
3336
3437#[ actix_web:: main]
3538async fn main ( ) -> anyhow:: Result < ( ) > {
36- init_logger ( ) ;
39+ let otel_provider = init_logger ( ) ;
3740 // Install the rustls crypto provider before any TLS operations.
3841 // This is required for rustls 0.23+ which needs an explicit crypto provider.
3942 // If the installation fails, log a warning but continue execution.
@@ -95,11 +98,19 @@ async fn main() -> anyhow::Result<()> {
9598 parseable_server. await ?;
9699 }
97100
101+ if let Some ( provider) = otel_provider {
102+ if let Err ( e) = provider. shutdown ( ) {
103+ warn ! ( "Failed to shutdown OTel tracer provider: {:?}" , e) ;
104+ }
105+ }
106+
98107 Ok ( ( ) )
99108}
100109
101- pub fn init_logger ( ) {
102- let filter_layer = EnvFilter :: try_from_default_env ( ) . unwrap_or_else ( |_| {
110+ pub fn init_logger ( ) -> Option < SdkTracerProvider > {
111+ let otel_provider = parseable:: telemetry:: init_tracing ( ) ;
112+
113+ let fmt_filter = EnvFilter :: try_from_default_env ( ) . unwrap_or_else ( |_| {
103114 let default_level = if cfg ! ( debug_assertions) {
104115 Level :: DEBUG
105116 } else {
@@ -116,10 +127,22 @@ pub fn init_logger() {
116127 . with_target ( true )
117128 . compact ( ) ;
118129
130+ let otel_layer = otel_provider. as_ref ( ) . map ( |provider| {
131+ let otel_filter =
132+ EnvFilter :: try_from_env ( "OTEL_TRACE_LEVEL" ) . unwrap_or_else ( |_| EnvFilter :: new ( "info" ) ) ;
133+ let tracer = provider. tracer ( "parseable" ) ;
134+ tracing_opentelemetry:: layer ( )
135+ . with_tracer ( tracer)
136+ . with_filter ( otel_filter)
137+ } ) ;
138+
119139 Registry :: default ( )
120- . with ( filter_layer )
140+ . with ( fmt_filter )
121141 . with ( fmt_layer)
142+ . with ( otel_layer)
122143 . init ( ) ;
144+
145+ otel_provider
123146}
124147
125148#[ cfg( windows) ]
0 commit comments