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
8#[cfg(feature = "spec_unstable_logs_enabled")]
9use opentelemetry::logs::Severity;
10use opentelemetry::time::now;
11
12#[derive(Debug, Clone)]
13pub 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 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 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}