opentelemetry_sdk/logs/
logger.rs

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