@@ -18,7 +18,7 @@ use opentelemetry_sdk::{
1818 propagation:: TraceContextPropagator ,
1919 resource:: { Resource , ResourceDetector , TelemetryResourceDetector } ,
2020 runtime,
21- trace:: TracerProvider ,
21+ trace:: { Tracer , TracerProvider } ,
2222} ;
2323use opentelemetry_semantic_conventions:: {
2424 attribute:: { CODE_FILEPATH , CODE_LINENO , SERVICE_NAME , SERVICE_VERSION } ,
@@ -32,10 +32,9 @@ use tracing_core::{
3232use tracing_log:: AsLog ;
3333use tracing_opentelemetry:: { MetricsLayer , OpenTelemetryLayer , OtelData } ;
3434use tracing_subscriber:: {
35- layer:: { Context , SubscriberExt } ,
35+ layer:: { Context , Layered } ,
3636 registry:: LookupSpan ,
37- util:: SubscriberInitExt ,
38- EnvFilter , Layer ,
37+ Layer , Registry ,
3938} ;
4039
4140#[ derive( Clone , Debug ) ]
@@ -361,7 +360,7 @@ pub(crate) fn log_level_as_severity(level: log::Level) -> Severity {
361360}
362361
363362// Create a Resource that captures information about the entity for which telemetry is recorded.
364- pub fn resource ( crate_name : & ' static str , package_version : & ' static str ) -> Resource {
363+ fn resource ( crate_name : & ' static str , package_version : & ' static str ) -> Resource {
365364 let project_name = std:: env:: var ( "SHUTTLE_PROJECT_NAME" ) . ok ( ) ;
366365
367366 // `TelemetryResourceDetector::detect()` automatically provides:
@@ -395,7 +394,7 @@ pub fn resource(crate_name: &'static str, package_version: &'static str) -> Reso
395394 ) ) )
396395}
397396
398- pub fn init_log_subscriber ( endpoint : & Option < String > , resource : Resource ) -> LoggerProvider {
397+ fn init_log_subscriber ( endpoint : & Option < String > , resource : Resource ) -> LoggerProvider {
399398 let mut builder = LoggerProvider :: builder ( ) . with_resource ( resource) ;
400399
401400 if let Some ( endpoint) = endpoint {
@@ -412,7 +411,7 @@ pub fn init_log_subscriber(endpoint: &Option<String>, resource: Resource) -> Log
412411}
413412
414413// Construct MeterProvider for MetricsLayer
415- pub fn init_meter_provider ( endpoint : & Option < String > , resource : Resource ) -> SdkMeterProvider {
414+ fn init_meter_provider ( endpoint : & Option < String > , resource : Resource ) -> SdkMeterProvider {
416415 let mut builder = MeterProviderBuilder :: default ( ) . with_resource ( resource) ;
417416
418417 if let Some ( endpoint) = endpoint {
@@ -438,7 +437,7 @@ pub fn init_meter_provider(endpoint: &Option<String>, resource: Resource) -> Sdk
438437}
439438
440439// Construct TracerProvider for OpenTelemetryLayer
441- pub fn init_tracer_provider ( endpoint : & Option < String > , resource : Resource ) -> TracerProvider {
440+ fn init_tracer_provider ( endpoint : & Option < String > , resource : Resource ) -> TracerProvider {
442441 // TODO(the-wondersmith): make trace sample rate & strategy configurable
443442 // let sampler = opentelemetry_sdk::trace::Sampler::ParentBased(Box::new(
444443 // opentelemetry_sdk::trace::Sampler::TraceIdRatioBased(1.0),
@@ -465,11 +464,18 @@ pub fn init_tracer_provider(endpoint: &Option<String>, resource: Resource) -> Tr
465464 provider
466465}
467466
468- // Initialize tracing-subscriber and return ExporterGuard for opentelemetry-related termination processing
469- pub fn init_tracing_subscriber (
467+ // Construct tracing-subscriber layers and return ExporterGuard for opentelemetry-related termination processing
468+ pub fn otel_tracing_subscriber (
470469 crate_name : & ' static str ,
471470 package_version : & ' static str ,
472- ) -> ProviderGuard {
471+ ) -> (
472+ Layered <
473+ LogCourier < Registry > ,
474+ Layered < OpenTelemetryLayer < Registry , Tracer > , MetricsLayer < Registry > , Registry > ,
475+ Registry ,
476+ > ,
477+ ProviderGuard ,
478+ ) {
473479 global:: set_text_map_propagator ( TraceContextPropagator :: new ( ) ) ;
474480
475481 let resource = resource ( crate_name, package_version) ;
@@ -481,22 +487,14 @@ pub fn init_tracing_subscriber(
481487 let meter = init_meter_provider ( & endpoint, resource. clone ( ) ) ;
482488 let logger = init_log_subscriber ( & endpoint, resource) ;
483489
484- let level_filter =
485- std :: env :: var ( "RUST_LOG" ) . unwrap_or_else ( |_| format ! ( "info,{}=debug" , crate_name ) ) ;
486-
487- let layers = EnvFilter :: from ( & level_filter )
488- . and_then ( MetricsLayer :: new ( meter. clone ( ) ) )
490+ let layers : Layered <
491+ LogCourier < Registry > ,
492+ Layered < OpenTelemetryLayer < Registry , Tracer > , MetricsLayer < Registry > , Registry > ,
493+ Registry ,
494+ > = MetricsLayer :: new ( meter. clone ( ) )
489495 . and_then ( OpenTelemetryLayer :: new ( tracer. tracer ( "shuttle-telemetry" ) ) )
490- . and_then (
491- tracing_subscriber:: fmt:: layer ( )
492- . compact ( )
493- . with_level ( true )
494- . with_target ( true ) ,
495- )
496496 . and_then ( LogCourier :: new ( logger. logger ( "shuttle-telemetry" ) ) ) ;
497497
498- tracing_subscriber:: registry ( ) . with ( layers) . init ( ) ;
499-
500498 if endpoint. is_none ( ) {
501499 tracing:: warn!(
502500 "No value set for `{}` env var, \
@@ -505,9 +503,12 @@ pub fn init_tracing_subscriber(
505503 ) ;
506504 }
507505
508- ProviderGuard {
509- logger,
510- tracer,
511- meter,
512- }
506+ (
507+ layers,
508+ ProviderGuard {
509+ logger,
510+ tracer,
511+ meter,
512+ } ,
513+ )
513514}
0 commit comments