1- use lazy_static:: lazy_static;
21use log:: { Level , Log , Metadata , Record } ;
3- use opentelemetry:: global:: ObjectSafeSpan ;
4- use opentelemetry:: logs:: AnyValue :: String ;
5- use opentelemetry:: logs:: { LogRecord , Logger , LoggerProvider } ;
6- use opentelemetry:: trace:: { SpanKind , Tracer , TracerProvider } ;
7- use opentelemetry:: { KeyValue , StringValue } ;
8- use opentelemetry_sdk:: logs:: { LogRecord as LogRecordSDK , Logger as LoggerSDK } ;
9- use opentelemetry_sdk:: trace:: Tracer as TracerSDK ;
2+ use opentelemetry:: trace:: TracerProvider ;
3+ use tracing:: { event, Level as TracingLevel } ;
104use tracing_subscriber:: layer:: SubscriberExt ;
115use tracing_subscriber:: Registry ;
126
137const OTEL_SERVICE_NAME : & str = "cubestore" ;
148
15- lazy_static ! {
16- pub static ref OT_TRACER : TracerSDK = init_tracing( ) . unwrap( ) ;
17- pub static ref OT_LOGGER : LoggerSDK = init_logging( ) . unwrap( ) ;
18- }
19-
209pub fn init_tracing_telemetry ( ) {
21- let telemetry = tracing_opentelemetry:: layer ( ) . with_tracer ( OT_TRACER . clone ( ) ) ;
22- let subscriber = Registry :: default ( ) . with ( telemetry) ;
23-
24- tracing:: subscriber:: set_global_default ( subscriber)
25- . expect ( "setting default tracing subscriber failed" ) ;
26- }
27-
28- pub fn init_tracing ( ) -> Result < TracerSDK , Box < dyn std:: error:: Error > > {
2910 let otlp_exporter = opentelemetry_otlp:: new_exporter ( )
3011 . http ( )
3112 . with_http_client ( reqwest:: Client :: new ( ) ) ;
3213 let tracer_provider = opentelemetry_otlp:: new_pipeline ( )
3314 . tracing ( )
3415 . with_exporter ( otlp_exporter)
35- . install_batch ( opentelemetry_sdk:: runtime:: Tokio ) ?;
16+ . install_batch ( opentelemetry_sdk:: runtime:: Tokio )
17+ . expect ( "Should be able to initialise the tracer_provider" ) ;
3618
3719 let tracer = tracer_provider. tracer_builder ( OTEL_SERVICE_NAME ) . build ( ) ;
38- Ok ( tracer)
39- }
4020
41- pub fn init_logging ( ) -> Result < LoggerSDK , Box < dyn std:: error:: Error > > {
42- let otlp_exporter = opentelemetry_otlp:: new_exporter ( )
43- . http ( )
44- . with_http_client ( reqwest:: Client :: new ( ) ) ;
45- let logger_provider = opentelemetry_otlp:: new_pipeline ( )
46- . logging ( )
47- . with_exporter ( otlp_exporter)
48- . install_batch ( opentelemetry_sdk:: runtime:: Tokio ) ?;
21+ let telemetry = tracing_opentelemetry:: layer ( ) . with_tracer ( tracer) ;
22+ let subscriber = Registry :: default ( ) . with ( telemetry) ;
4923
50- let logger = logger_provider . logger_builder ( OTEL_SERVICE_NAME ) . build ( ) ;
51- Ok ( logger )
24+ tracing :: subscriber :: set_global_default ( subscriber )
25+ . expect ( "setting default tracing subscriber failed" ) ;
5226}
5327
5428pub struct OpenTelemetryLogger {
@@ -74,25 +48,19 @@ impl Log for OpenTelemetryLogger {
7448
7549 match record. metadata ( ) . level ( ) {
7650 Level :: Error => {
77- // Log error messages using OpenTelemetry logger
78- let logger = & * OT_LOGGER ;
79- emit_log ( record, logger) ;
51+ event ! ( TracingLevel :: ERROR , "{}" , record. args( ) . to_string( ) ) ;
8052 }
8153 Level :: Warn => {
82- // Log warning messages using OpenTelemetry logger
83- let logger = & * OT_LOGGER ;
84- emit_log ( record, logger) ;
54+ event ! ( TracingLevel :: WARN , "{}" , record. args( ) . to_string( ) ) ;
55+ }
56+ Level :: Info => {
57+ event ! ( TracingLevel :: INFO , "{}" , record. args( ) . to_string( ) ) ;
8558 }
86- Level :: Info => { }
8759 Level :: Debug => {
88- // Create an OpenTelemetry trace for Debug level
89- let tracer = & * OT_TRACER ;
90- create_log_trace ( record, tracer) ;
60+ event ! ( TracingLevel :: DEBUG , "{}" , record. args( ) . to_string( ) ) ;
9161 }
9262 Level :: Trace => {
93- // Create an OpenTelemetry trace for Trace level
94- let tracer = & * OT_TRACER ;
95- create_log_trace ( record, tracer) ;
63+ event ! ( TracingLevel :: TRACE , "{}" , record. args( ) . to_string( ) ) ;
9664 }
9765 }
9866 }
@@ -101,30 +69,3 @@ impl Log for OpenTelemetryLogger {
10169 self . logger . flush ( )
10270 }
10371}
104-
105- fn emit_log ( record : & Record , logger : & LoggerSDK ) {
106- let mut rec = LogRecordSDK :: default ( ) ;
107-
108- rec. set_target ( record. target ( ) . to_string ( ) ) ;
109- rec. set_severity_text ( record. level ( ) . as_str ( ) ) ;
110- rec. set_body ( String ( StringValue :: from ( record. args ( ) . to_string ( ) ) ) ) ;
111-
112- logger. emit ( rec) ;
113- }
114-
115- fn create_log_trace ( record : & Record , tracer : & TracerSDK ) {
116- let mut span = tracer
117- . span_builder ( format ! (
118- "{} ({})" ,
119- record. module_path( ) . unwrap_or( record. target( ) ) ,
120- record. file( ) . unwrap_or( "-" )
121- ) )
122- . with_kind ( SpanKind :: Server )
123- . with_attributes ( [
124- KeyValue :: new ( "level" , record. level ( ) . as_str ( ) ) ,
125- KeyValue :: new ( "target" , record. target ( ) . to_string ( ) ) ,
126- KeyValue :: new ( "message" , record. args ( ) . to_string ( ) ) ,
127- ] )
128- . start ( tracer) ;
129- span. end ( ) ;
130- }
0 commit comments