11use opentelemetry:: {
22 logs:: { AnyValue , LogRecord , Logger , LoggerProvider , Severity } ,
3- InstrumentationScope , Key ,
3+ Key ,
44} ;
5- use std:: borrow:: Cow ;
65use tracing_core:: Level ;
76#[ cfg( feature = "experimental_metadata_attributes" ) ]
87use tracing_core:: Metadata ;
98#[ cfg( feature = "experimental_metadata_attributes" ) ]
109use tracing_log:: NormalizeEvent ;
1110use tracing_subscriber:: { registry:: LookupSpan , Layer } ;
1211
13- const INSTRUMENTATION_LIBRARY_NAME : & str = "opentelemetry-appender-tracing" ;
14-
1512/// Visitor to record the fields from the event record.
1613struct EventVisitor < ' a , LR : LogRecord > {
1714 log_record : & ' a mut LR ,
@@ -135,12 +132,13 @@ where
135132 L : Logger + Send + Sync ,
136133{
137134 pub fn new ( provider : & P ) -> Self {
138- let scope = InstrumentationScope :: builder ( INSTRUMENTATION_LIBRARY_NAME )
139- . with_version ( Cow :: Borrowed ( env ! ( "CARGO_PKG_VERSION" ) ) )
140- . build ( ) ;
141-
142135 OpenTelemetryTracingBridge {
143- logger : provider. logger_with_scope ( scope) ,
136+ // Using empty scope name.
137+ // The name/version of this library itself can be added
138+ // as a Scope attribute, once a semantic convention is
139+ // defined for the same.
140+ // See https://github.com/open-telemetry/semantic-conventions/issues/1550
141+ logger : provider. logger ( "" ) ,
144142 _phantom : Default :: default ( ) ,
145143 }
146144 }
@@ -245,6 +243,7 @@ mod tests {
245243 . any ( |( k, v) | k == key && v == value)
246244 }
247245
246+ #[ allow( impl_trait_overcaptures) ] // can only be fixed with Rust 1.82+
248247 fn create_tracing_subscriber (
249248 _exporter : InMemoryLogExporter ,
250249 logger_provider : & SdkLoggerProvider ,
@@ -348,8 +347,18 @@ mod tests {
348347 . expect ( "Atleast one log is expected to be present." ) ;
349348
350349 // Validate common fields
351- assert_eq ! ( log. instrumentation. name( ) , "opentelemetry-appender-tracing " ) ;
350+ assert_eq ! ( log. instrumentation. name( ) , "" ) ;
352351 assert_eq ! ( log. record. severity_number( ) , Some ( Severity :: Error ) ) ;
352+ // Validate target
353+ assert_eq ! (
354+ log. record. target( ) . expect( "target is expected" ) . to_string( ) ,
355+ "my-system"
356+ ) ;
357+ // Validate event name
358+ assert_eq ! (
359+ log. record. event_name( ) . expect( "event_name is expected" ) ,
360+ "my-event-name"
361+ ) ;
353362
354363 // Validate trace context is none.
355364 assert ! ( log. record. trace_context( ) . is_none( ) ) ;
@@ -398,6 +407,39 @@ mod tests {
398407 assert ! ( attributes_key. contains( & Key :: new( "code.lineno" ) ) ) ;
399408 assert ! ( !attributes_key. contains( & Key :: new( "log.target" ) ) ) ;
400409 }
410+
411+ // Test when target, eventname are not explicitly provided
412+ exporter. reset ( ) ;
413+ error ! (
414+ event_id = 20 ,
415+ user_name = "otel" ,
416+ 417+ ) ;
418+ assert ! ( logger_provider. force_flush( ) . is_ok( ) ) ;
419+
420+ // Assert TODO: move to helper methods
421+ let exported_logs = exporter
422+ . get_emitted_logs ( )
423+ . expect ( "Logs are expected to be exported." ) ;
424+ assert_eq ! ( exported_logs. len( ) , 1 ) ;
425+ let log = exported_logs
426+ . first ( )
427+ . expect ( "Atleast one log is expected to be present." ) ;
428+
429+ // Validate target - tracing defaults to module path
430+ assert_eq ! (
431+ log. record. target( ) . expect( "target is expected" ) . to_string( ) ,
432+ "opentelemetry_appender_tracing::layer::tests"
433+ ) ;
434+ // Validate event name - tracing defaults to event followed source & line number
435+ // Assert is doing "contains" check to avoid tests failing when line number changes.
436+ // and also account for the fact that the module path is different on different platforms.
437+ // Ex.: The path will be different on a Windows and Linux machine.
438+ assert ! ( log
439+ . record
440+ . event_name( )
441+ . expect( "event_name is expected" )
442+ . contains( "event opentelemetry-appender-tracing" ) , ) ;
401443 }
402444
403445 #[ test]
@@ -442,8 +484,18 @@ mod tests {
442484 . expect ( "Atleast one log is expected to be present." ) ;
443485
444486 // validate common fields.
445- assert_eq ! ( log. instrumentation. name( ) , "opentelemetry-appender-tracing " ) ;
487+ assert_eq ! ( log. instrumentation. name( ) , "" ) ;
446488 assert_eq ! ( log. record. severity_number( ) , Some ( Severity :: Error ) ) ;
489+ // Validate target
490+ assert_eq ! (
491+ log. record. target( ) . expect( "target is expected" ) . to_string( ) ,
492+ "my-system"
493+ ) ;
494+ // Validate event name
495+ assert_eq ! (
496+ log. record. event_name( ) . expect( "event_name is expected" ) ,
497+ "my-event-name"
498+ ) ;
447499
448500 // validate trace context.
449501 assert ! ( log. record. trace_context( ) . is_some( ) ) ;
@@ -583,7 +635,7 @@ mod tests {
583635 drop ( tracing_log:: LogTracer :: init ( ) ) ;
584636
585637 // Act
586- log:: error!( target : "my-system" , "log from log crate" ) ;
638+ log:: error!( "log from log crate" ) ;
587639 assert ! ( logger_provider. force_flush( ) . is_ok( ) ) ;
588640
589641 // Assert TODO: move to helper methods
@@ -596,8 +648,19 @@ mod tests {
596648 . expect ( "Atleast one log is expected to be present." ) ;
597649
598650 // Validate common fields
599- assert_eq ! ( log. instrumentation. name( ) , "opentelemetry-appender-tracing " ) ;
651+ assert_eq ! ( log. instrumentation. name( ) , "" ) ;
600652 assert_eq ! ( log. record. severity_number( ) , Some ( Severity :: Error ) ) ;
653+ // Target and EventName from Log crate are "log" and "log event" respectively.
654+ // Validate target
655+ assert_eq ! (
656+ log. record. target( ) . expect( "target is expected" ) . to_string( ) ,
657+ "log"
658+ ) ;
659+ // Validate event name
660+ assert_eq ! (
661+ log. record. event_name( ) . expect( "event_name is expected" ) ,
662+ "log event"
663+ ) ;
601664
602665 // Validate trace context is none.
603666 assert ! ( log. record. trace_context( ) . is_none( ) ) ;
@@ -675,7 +738,7 @@ mod tests {
675738 . expect ( "Atleast one log is expected to be present." ) ;
676739
677740 // validate common fields.
678- assert_eq ! ( log. instrumentation. name( ) , "opentelemetry-appender-tracing " ) ;
741+ assert_eq ! ( log. instrumentation. name( ) , "" ) ;
679742 assert_eq ! ( log. record. severity_number( ) , Some ( Severity :: Error ) ) ;
680743
681744 // validate trace context.
0 commit comments