opentelemetry_sdk/logs/
logger.rs1use super::{SdkLogRecord, SdkLoggerProvider, TraceContext};
2use opentelemetry::{trace::TraceContextExt, Context, InstrumentationScope};
3
4#[cfg(feature = "spec_unstable_logs_enabled")]
5use opentelemetry::logs::Severity;
6use opentelemetry::time::now;
7
8#[derive(Debug)]
9pub struct SdkLogger {
13 scope: InstrumentationScope,
14 provider: SdkLoggerProvider,
15}
16
17impl SdkLogger {
18 pub(crate) fn new(scope: InstrumentationScope, provider: SdkLoggerProvider) -> Self {
19 SdkLogger { scope, provider }
20 }
21}
22
23impl opentelemetry::logs::Logger for SdkLogger {
24 type LogRecord = SdkLogRecord;
25
26 fn create_log_record(&self) -> Self::LogRecord {
27 SdkLogRecord::new()
28 }
29
30 fn emit(&self, mut record: Self::LogRecord) {
32 if Context::is_current_telemetry_suppressed() {
33 return;
34 }
35 let provider = &self.provider;
36 let processors = provider.log_processors();
37
38 if record.trace_context.is_none() {
40 Context::map_current(|cx| {
41 cx.has_active_span().then(|| {
42 record.trace_context = Some(TraceContext::from(cx.span().span_context()))
43 })
44 });
45 }
46 if record.observed_timestamp.is_none() {
47 record.observed_timestamp = Some(now());
48 }
49
50 for p in processors {
51 p.emit(&mut record, &self.scope);
52 }
53 }
54
55 #[cfg(feature = "spec_unstable_logs_enabled")]
56 #[inline]
57 fn event_enabled(&self, level: Severity, target: &str, name: Option<&str>) -> bool {
58 if Context::is_current_telemetry_suppressed() {
59 return false;
60 }
61 self.provider
62 .log_processors()
63 .iter()
64 .any(|processor| processor.event_enabled(level, target, name))
65 }
66}