|
1 |
| -use opentelemetry::{ |
2 |
| - logs::{LogRecord, Logger, LoggerProvider, Severity, TraceContext}, |
3 |
| - trace::{SpanContext, TraceFlags, TraceState}, |
4 |
| -}; |
| 1 | +use opentelemetry::logs::{LogRecord, Logger, LoggerProvider, Severity}; |
5 | 2 | use std::borrow::Cow;
|
6 | 3 | use tracing_core::{Level, Subscriber};
|
7 |
| -use tracing_opentelemetry::OtelData; |
8 | 4 | use tracing_subscriber::{registry::LookupSpan, Layer};
|
9 | 5 |
|
10 | 6 | const INSTRUMENTATION_LIBRARY_NAME: &str = "opentelemetry-appender-tracing";
|
@@ -98,26 +94,19 @@ where
|
98 | 94 | P: LoggerProvider<Logger = L> + Send + Sync + 'static,
|
99 | 95 | L: Logger + Send + Sync + 'static,
|
100 | 96 | {
|
101 |
| - fn on_event(&self, event: &tracing::Event<'_>, ctx: tracing_subscriber::layer::Context<'_, S>) { |
| 97 | + fn on_event( |
| 98 | + &self, |
| 99 | + event: &tracing::Event<'_>, |
| 100 | + _ctx: tracing_subscriber::layer::Context<'_, S>, |
| 101 | + ) { |
102 | 102 | let meta = event.metadata();
|
103 | 103 | let mut log_record: LogRecord = LogRecord::default();
|
104 | 104 | log_record.severity_number = Some(severity_of_level(meta.level()));
|
105 | 105 | log_record.severity_text = Some(meta.level().to_string().into());
|
106 | 106 |
|
107 | 107 | // Extract the trace_id & span_id from the opentelemetry extension.
|
108 |
| - if let Some((trace_id, span_id)) = ctx.lookup_current().and_then(|span| { |
109 |
| - span.extensions() |
110 |
| - .get::<OtelData>() |
111 |
| - .and_then(|ext| ext.builder.trace_id.zip(ext.builder.span_id)) |
112 |
| - }) { |
113 |
| - log_record.trace_context = Some(TraceContext::from(&SpanContext::new( |
114 |
| - trace_id, |
115 |
| - span_id, |
116 |
| - TraceFlags::default(), |
117 |
| - false, |
118 |
| - TraceState::default(), |
119 |
| - ))); |
120 |
| - } |
| 108 | + #[cfg(feature = "tracing")] |
| 109 | + inject_trace_context(&mut log_record, &_ctx); |
121 | 110 |
|
122 | 111 | // add the `name` metadata to attributes
|
123 | 112 | // TBD - Propose this to be part of log_record metadata.
|
@@ -146,6 +135,33 @@ where
|
146 | 135 | }
|
147 | 136 | }
|
148 | 137 |
|
| 138 | +#[cfg(feature = "tracing")] |
| 139 | +fn inject_trace_context<S>( |
| 140 | + log_record: &mut LogRecord, |
| 141 | + ctx: &tracing_subscriber::layer::Context<'_, S>, |
| 142 | +) where |
| 143 | + S: Subscriber + for<'a> LookupSpan<'a>, |
| 144 | +{ |
| 145 | + use opentelemetry::{ |
| 146 | + logs::TraceContext, |
| 147 | + trace::{SpanContext, TraceFlags, TraceState}, |
| 148 | + }; |
| 149 | + |
| 150 | + if let Some((trace_id, span_id)) = ctx.lookup_current().and_then(|span| { |
| 151 | + span.extensions() |
| 152 | + .get::<tracing_opentelemetry::OtelData>() |
| 153 | + .and_then(|ext| ext.builder.trace_id.zip(ext.builder.span_id)) |
| 154 | + }) { |
| 155 | + log_record.trace_context = Some(TraceContext::from(&SpanContext::new( |
| 156 | + trace_id, |
| 157 | + span_id, |
| 158 | + TraceFlags::default(), |
| 159 | + false, |
| 160 | + TraceState::default(), |
| 161 | + ))); |
| 162 | + } |
| 163 | +} |
| 164 | + |
149 | 165 | const fn severity_of_level(level: &Level) -> Severity {
|
150 | 166 | match *level {
|
151 | 167 | Level::TRACE => Severity::Trace,
|
|
0 commit comments