Skip to content

Commit 249e654

Browse files
committed
Fix OTel Appender for tracing from suppressing other layers (open-telemetry#2668)
1 parent 2a1b03a commit 249e654

File tree

4 files changed

+28
-53
lines changed

4 files changed

+28
-53
lines changed

opentelemetry-appender-tracing/CHANGELOG.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
## vNext
44

5+
Fixes [1682](https://github.com/open-telemetry/opentelemetry-rust/issues/1682).
6+
"spec_unstable_logs_enabled" feature now do not suppress logs for other layers.
7+
58
## 0.28.1
69

710
Released 2025-Feb-12
811

9-
- Bump `tracing-opentelemetry` to 0.29
10-
- New experimental feature to use trace\_id & span\_id from spans created through the [tracing](https://crates.io/crates/tracing) crate (experimental_use_tracing_span_context) [#2438](https://github.com/open-telemetry/opentelemetry-rust/pull/2438)
11-
12+
- New *experimental* feature to use trace_id & span_id from spans created through the [tracing](https://crates.io/crates/tracing) crate (experimental_use_tracing_span_context) [#2438](https://github.com/open-telemetry/opentelemetry-rust/pull/2438)
1213

1314
## 0.28.0
1415

@@ -27,6 +28,7 @@ Released 2024-Nov-11
2728
- **Breaking** [2291](https://github.com/open-telemetry/opentelemetry-rust/pull/2291) Rename `logs_level_enabled flag` to `spec_unstable_logs_enabled`. Please enable this updated flag if the feature is needed. This flag will be removed once the feature is stabilized in the specifications.
2829

2930
## v0.26.0
31+
3032
Released 2024-Sep-30
3133

3234
- Update `opentelemetry` dependency version to 0.26
@@ -45,7 +47,7 @@ Released 2024-Sep-30
4547
Exporters might use the target to override the instrumentation scope, which previously contained "opentelemetry-appender-tracing".
4648

4749
- **Breaking** [1928](https://github.com/open-telemetry/opentelemetry-rust/pull/1928) Insert tracing event name into LogRecord::event_name instead of attributes.
48-
- If using a custom exporter, then they must serialize this field directly from LogRecord::event_name instead of iterating over the attributes. OTLP Exporter is modified to handle this.
50+
- If using a custom exporter, then they must serialize this field directly from LogRecord::event_name instead of iterating over the attributes. OTLP Exporter is modified to handle this.
4951
- Update `opentelemetry` dependency version to 0.24
5052

5153
## v0.4.0

opentelemetry-appender-tracing/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] }
3636
default = []
3737
experimental_metadata_attributes = ["dep:tracing-log"]
3838
spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"]
39-
# TODO - Enable this in 0.28.1 (once tracing-opentelemetry v0.29 is released)
4039
experimental_use_tracing_span_context = ["tracing-opentelemetry"]
4140

4241

opentelemetry-appender-tracing/benches/logs.rs

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use criterion::{criterion_group, criterion_main, Criterion};
1717
use opentelemetry::InstrumentationScope;
1818
use opentelemetry_appender_tracing::layer as tracing_layer;
1919
use opentelemetry_sdk::error::OTelSdkResult;
20-
use opentelemetry_sdk::logs::{LogBatch, LogExporter};
2120
use opentelemetry_sdk::logs::{LogProcessor, SdkLogRecord, SdkLoggerProvider};
2221
use opentelemetry_sdk::Resource;
2322
#[cfg(not(target_os = "windows"))]
@@ -27,40 +26,19 @@ use tracing_subscriber::prelude::*;
2726
use tracing_subscriber::Layer;
2827
use tracing_subscriber::Registry;
2928

30-
#[derive(Debug, Clone)]
31-
struct NoopExporter {
32-
enabled: bool,
33-
}
34-
35-
impl LogExporter for NoopExporter {
36-
#[allow(clippy::manual_async_fn)]
37-
fn export(
38-
&self,
39-
_batch: LogBatch<'_>,
40-
) -> impl std::future::Future<Output = OTelSdkResult> + Send {
41-
async { OTelSdkResult::Ok(()) }
42-
}
43-
44-
fn event_enabled(&self, _: opentelemetry::logs::Severity, _: &str, _: &str) -> bool {
45-
self.enabled
46-
}
47-
}
48-
4929
#[derive(Debug)]
50-
struct NoopProcessor<E: LogExporter> {
51-
exporter: E,
30+
struct NoopProcessor {
31+
enabled: bool,
5232
}
5333

54-
impl<E: LogExporter> NoopProcessor<E> {
55-
fn new(exporter: E) -> Self {
56-
Self { exporter }
34+
impl NoopProcessor {
35+
fn new(enabled: bool) -> Self {
36+
Self { enabled }
5737
}
5838
}
5939

60-
impl<E: LogExporter> LogProcessor for NoopProcessor<E> {
61-
fn emit(&self, _: &mut SdkLogRecord, _: &InstrumentationScope) {
62-
// no-op
63-
}
40+
impl LogProcessor for NoopProcessor {
41+
fn emit(&self, _: &mut SdkLogRecord, _: &InstrumentationScope) {}
6442

6543
fn force_flush(&self) -> OTelSdkResult {
6644
Ok(())
@@ -72,11 +50,11 @@ impl<E: LogExporter> LogProcessor for NoopProcessor<E> {
7250

7351
fn event_enabled(
7452
&self,
75-
level: opentelemetry::logs::Severity,
76-
target: &str,
77-
name: &str,
53+
_level: opentelemetry::logs::Severity,
54+
_target: &str,
55+
_name: &str,
7856
) -> bool {
79-
self.exporter.event_enabled(level, target, name)
57+
self.enabled
8058
}
8159
}
8260

@@ -126,8 +104,7 @@ fn benchmark_no_subscriber(c: &mut Criterion) {
126104
}
127105

128106
fn benchmark_with_ot_layer(c: &mut Criterion, enabled: bool, bench_name: &str) {
129-
let exporter = NoopExporter { enabled };
130-
let processor = NoopProcessor::new(exporter);
107+
let processor = NoopProcessor::new(enabled);
131108
let provider = SdkLoggerProvider::builder()
132109
.with_resource(
133110
Resource::builder_empty()

opentelemetry-appender-tracing/src/layer.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,14 @@ where
158158
event: &tracing::Event<'_>,
159159
_ctx: tracing_subscriber::layer::Context<'_, S>,
160160
) {
161+
let severity = severity_of_level(event.metadata().level());
162+
let target = event.metadata().target();
163+
#[cfg(feature = "spec_unstable_logs_enabled")]
164+
if !self.logger.event_enabled(severity, target) {
165+
// TODO: See if we need internal logs or track the count.
166+
return;
167+
}
168+
161169
#[cfg(feature = "experimental_metadata_attributes")]
162170
let normalized_meta = event.normalized_metadata();
163171

@@ -170,9 +178,9 @@ where
170178
let mut log_record = self.logger.create_log_record();
171179

172180
// TODO: Fix heap allocation
173-
log_record.set_target(meta.target().to_string());
181+
log_record.set_target(target.to_string());
174182
log_record.set_event_name(meta.name());
175-
log_record.set_severity_number(severity_of_level(meta.level()));
183+
log_record.set_severity_number(severity);
176184
log_record.set_severity_text(meta.level().as_str());
177185
let mut visitor = EventVisitor::new(&mut log_record);
178186
#[cfg(feature = "experimental_metadata_attributes")]
@@ -203,17 +211,6 @@ where
203211
//emit record
204212
self.logger.emit(log_record);
205213
}
206-
207-
#[cfg(feature = "spec_unstable_logs_enabled")]
208-
fn event_enabled(
209-
&self,
210-
_event: &tracing_core::Event<'_>,
211-
_ctx: tracing_subscriber::layer::Context<'_, S>,
212-
) -> bool {
213-
let severity = severity_of_level(_event.metadata().level());
214-
self.logger
215-
.event_enabled(severity, _event.metadata().target())
216-
}
217214
}
218215

219216
const fn severity_of_level(level: &Level) -> Severity {

0 commit comments

Comments
 (0)