@@ -57,38 +57,42 @@ async fn main() -> Result<()> {
57
57
. with_thread_ids ( true )
58
58
. with_ansi ( std:: io:: stderr ( ) . is_terminal ( ) ) ;
59
59
60
- // Set up the OpenTelemetry exporter, defaults to 127.0.0.1:4317
61
- let otlp_exporter = opentelemetry_otlp:: new_exporter ( )
62
- . tonic ( )
63
- . with_endpoint ( & config. opentelemetry . exporter_endpoint )
64
- . with_timeout ( Duration :: from_secs (
65
- config. opentelemetry . exporter_timeout_secs ,
66
- ) ) ;
67
-
68
- // Set up the OpenTelemetry tracer
69
- let tracer = opentelemetry_otlp:: new_pipeline ( )
70
- . tracing ( )
71
- . with_exporter ( otlp_exporter)
72
- . with_trace_config ( opentelemetry_sdk:: trace:: config ( ) . with_resource (
73
- opentelemetry_sdk:: Resource :: new ( vec ! [ KeyValue :: new( "service.name" , "pyth-agent" ) ] ) ,
74
- ) )
75
- . install_batch ( opentelemetry_sdk:: runtime:: Tokio )
76
- . map_err ( |e| anyhow:: anyhow!( "Error initializing open telemetry: {}" , e) ) ?;
77
-
78
- // Set up the telemetry layer
79
- let telemetry = tracing_opentelemetry:: layer ( ) . with_tracer ( tracer) ;
80
-
81
- let registry = tracing_subscriber:: registry ( )
82
- . with ( telemetry)
83
- . with ( env_filter) ;
84
-
60
+ let mut layers = Vec :: new ( ) ;
61
+ layers. push ( env_filter. boxed ( ) ) ;
62
+
63
+ // Set up OpenTelemetry only if it's configured
64
+ if let Some ( opentelemetry_config) = & config. opentelemetry {
65
+ // Set up the OpenTelemetry exporter
66
+ let otlp_exporter = opentelemetry_otlp:: new_exporter ( )
67
+ . tonic ( )
68
+ . with_endpoint ( & opentelemetry_config. exporter_endpoint )
69
+ . with_timeout ( Duration :: from_secs (
70
+ opentelemetry_config. exporter_timeout_secs ,
71
+ ) ) ;
72
+
73
+ // Set up the OpenTelemetry tracer
74
+ let tracer = opentelemetry_otlp:: new_pipeline ( )
75
+ . tracing ( )
76
+ . with_exporter ( otlp_exporter)
77
+ . with_trace_config ( opentelemetry_sdk:: trace:: config ( ) . with_resource (
78
+ opentelemetry_sdk:: Resource :: new ( vec ! [ KeyValue :: new( "service.name" , "pyth-agent" ) ] ) ,
79
+ ) )
80
+ . install_batch ( opentelemetry_sdk:: runtime:: Tokio )
81
+ . map_err ( |e| anyhow:: anyhow!( "Error initializing open telemetry: {}" , e) ) ?;
82
+
83
+ // Set up the telemetry layer
84
+ let telemetry = tracing_opentelemetry:: layer ( ) . with_tracer ( tracer) ;
85
+ layers. push ( telemetry. boxed ( ) ) ;
86
+ }
85
87
// Use the compact formatter if we're in a terminal, otherwise use the JSON formatter.
86
88
if std:: io:: stderr ( ) . is_terminal ( ) {
87
- registry . with ( fmt_layer. compact ( ) ) . init ( ) ;
89
+ layers . push ( fmt_layer. compact ( ) . boxed ( ) ) ;
88
90
} else {
89
- registry . with ( fmt_layer. json ( ) ) . init ( ) ;
91
+ layers . push ( fmt_layer. json ( ) . boxed ( ) ) ;
90
92
}
91
93
94
+ tracing_subscriber:: registry ( ) . with ( layers) . init ( ) ;
95
+
92
96
// Launch the application. If it fails, print the full backtrace and exit. RUST_BACKTRACE
93
97
// should be set to 1 for this otherwise it will only print the top-level error.
94
98
if let Err ( err) = start ( config) . await {
0 commit comments