diff --git a/opentelemetry-appender-tracing/CHANGELOG.md b/opentelemetry-appender-tracing/CHANGELOG.md index d7898bf92e..ada8903385 100644 --- a/opentelemetry-appender-tracing/CHANGELOG.md +++ b/opentelemetry-appender-tracing/CHANGELOG.md @@ -2,13 +2,14 @@ ## vNext +Fixes [1682](https://github.com/open-telemetry/opentelemetry-rust/issues/1682). +"spec_unstable_logs_enabled" feature now do not suppress logs for other layers. + ## 0.28.1 Released 2025-Feb-12 -- Bump `tracing-opentelemetry` to 0.29 -- 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) - +- 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) ## 0.28.0 @@ -27,6 +28,7 @@ Released 2024-Nov-11 - **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. ## v0.26.0 + Released 2024-Sep-30 - Update `opentelemetry` dependency version to 0.26 @@ -45,7 +47,7 @@ Released 2024-Sep-30 Exporters might use the target to override the instrumentation scope, which previously contained "opentelemetry-appender-tracing". - **Breaking** [1928](https://github.com/open-telemetry/opentelemetry-rust/pull/1928) Insert tracing event name into LogRecord::event_name instead of attributes. - - 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. + - 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. - Update `opentelemetry` dependency version to 0.24 ## v0.4.0 diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index 78378d12bf..5a4002344d 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -36,7 +36,6 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] } default = [] experimental_metadata_attributes = ["dep:tracing-log"] spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"] -# TODO - Enable this in 0.28.1 (once tracing-opentelemetry v0.29 is released) experimental_use_tracing_span_context = ["tracing-opentelemetry"] diff --git a/opentelemetry-appender-tracing/benches/logs.rs b/opentelemetry-appender-tracing/benches/logs.rs index 6a2c938177..0ec47c1863 100644 --- a/opentelemetry-appender-tracing/benches/logs.rs +++ b/opentelemetry-appender-tracing/benches/logs.rs @@ -17,7 +17,6 @@ use criterion::{criterion_group, criterion_main, Criterion}; use opentelemetry::InstrumentationScope; use opentelemetry_appender_tracing::layer as tracing_layer; use opentelemetry_sdk::error::OTelSdkResult; -use opentelemetry_sdk::logs::{LogBatch, LogExporter}; use opentelemetry_sdk::logs::{LogProcessor, SdkLogRecord, SdkLoggerProvider}; use opentelemetry_sdk::Resource; #[cfg(not(target_os = "windows"))] @@ -27,40 +26,19 @@ use tracing_subscriber::prelude::*; use tracing_subscriber::Layer; use tracing_subscriber::Registry; -#[derive(Debug, Clone)] -struct NoopExporter { - enabled: bool, -} - -impl LogExporter for NoopExporter { - #[allow(clippy::manual_async_fn)] - fn export( - &self, - _batch: LogBatch<'_>, - ) -> impl std::future::Future + Send { - async { OTelSdkResult::Ok(()) } - } - - fn event_enabled(&self, _: opentelemetry::logs::Severity, _: &str, _: &str) -> bool { - self.enabled - } -} - #[derive(Debug)] -struct NoopProcessor { - exporter: E, +struct NoopProcessor { + enabled: bool, } -impl NoopProcessor { - fn new(exporter: E) -> Self { - Self { exporter } +impl NoopProcessor { + fn new(enabled: bool) -> Self { + Self { enabled } } } -impl LogProcessor for NoopProcessor { - fn emit(&self, _: &mut SdkLogRecord, _: &InstrumentationScope) { - // no-op - } +impl LogProcessor for NoopProcessor { + fn emit(&self, _: &mut SdkLogRecord, _: &InstrumentationScope) {} fn force_flush(&self) -> OTelSdkResult { Ok(()) @@ -72,11 +50,11 @@ impl LogProcessor for NoopProcessor { fn event_enabled( &self, - level: opentelemetry::logs::Severity, - target: &str, - name: &str, + _level: opentelemetry::logs::Severity, + _target: &str, + _name: &str, ) -> bool { - self.exporter.event_enabled(level, target, name) + self.enabled } } @@ -126,8 +104,7 @@ fn benchmark_no_subscriber(c: &mut Criterion) { } fn benchmark_with_ot_layer(c: &mut Criterion, enabled: bool, bench_name: &str) { - let exporter = NoopExporter { enabled }; - let processor = NoopProcessor::new(exporter); + let processor = NoopProcessor::new(enabled); let provider = SdkLoggerProvider::builder() .with_resource( Resource::builder_empty() diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index f883cf087a..a7e47e8ccd 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -158,6 +158,14 @@ where event: &tracing::Event<'_>, _ctx: tracing_subscriber::layer::Context<'_, S>, ) { + let severity = severity_of_level(event.metadata().level()); + let target = event.metadata().target(); + #[cfg(feature = "spec_unstable_logs_enabled")] + if !self.logger.event_enabled(severity, target) { + // TODO: See if we need internal logs or track the count. + return; + } + #[cfg(feature = "experimental_metadata_attributes")] let normalized_meta = event.normalized_metadata(); @@ -170,9 +178,9 @@ where let mut log_record = self.logger.create_log_record(); // TODO: Fix heap allocation - log_record.set_target(meta.target().to_string()); + log_record.set_target(target.to_string()); log_record.set_event_name(meta.name()); - log_record.set_severity_number(severity_of_level(meta.level())); + log_record.set_severity_number(severity); log_record.set_severity_text(meta.level().as_str()); let mut visitor = EventVisitor::new(&mut log_record); #[cfg(feature = "experimental_metadata_attributes")] @@ -203,17 +211,6 @@ where //emit record self.logger.emit(log_record); } - - #[cfg(feature = "spec_unstable_logs_enabled")] - fn event_enabled( - &self, - _event: &tracing_core::Event<'_>, - _ctx: tracing_subscriber::layer::Context<'_, S>, - ) -> bool { - let severity = severity_of_level(_event.metadata().level()); - self.logger - .event_enabled(severity, _event.metadata().target()) - } } const fn severity_of_level(level: &Level) -> Severity {