forked from open-telemetry/opentelemetry-rust
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.rs
62 lines (52 loc) · 1.84 KB
/
logger.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use super::{SdkLogRecord, SdkLoggerProvider, TraceContext};
use opentelemetry::{trace::TraceContextExt, Context, InstrumentationScope};
#[cfg(feature = "spec_unstable_logs_enabled")]
use opentelemetry::logs::Severity;
use opentelemetry::time::now;
#[derive(Debug)]
/// The object for emitting [`LogRecord`]s.
///
/// [`LogRecord`]: opentelemetry::logs::LogRecord
pub struct SdkLogger {
scope: InstrumentationScope,
provider: SdkLoggerProvider,
}
impl SdkLogger {
pub(crate) fn new(scope: InstrumentationScope, provider: SdkLoggerProvider) -> Self {
SdkLogger { scope, provider }
}
}
impl opentelemetry::logs::Logger for SdkLogger {
type LogRecord = SdkLogRecord;
fn create_log_record(&self) -> Self::LogRecord {
SdkLogRecord::new()
}
/// Emit a `LogRecord`.
fn emit(&self, mut record: Self::LogRecord) {
let provider = &self.provider;
let processors = provider.log_processors();
//let mut log_record = record;
if record.trace_context.is_none() {
let trace_context = Context::map_current(|cx| {
cx.has_active_span()
.then(|| TraceContext::from(cx.span().span_context()))
});
if let Some(ref trace_context) = trace_context {
record.trace_context = Some(trace_context.clone());
}
}
if record.observed_timestamp.is_none() {
record.observed_timestamp = Some(now());
}
for p in processors {
p.emit(&mut record, &self.scope);
}
}
#[cfg(feature = "spec_unstable_logs_enabled")]
fn event_enabled(&self, level: Severity, target: &str, name: Option<&str>) -> bool {
self.provider
.log_processors()
.iter()
.any(|processor| processor.event_enabled(level, target, name))
}
}