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