From 300ecb2affb83abdf96fde863240f8236443b798 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Wed, 18 Jun 2025 18:23:33 +0000 Subject: [PATCH 1/2] Remove spec_unstable_logs_enabled feature -copilot try1 --- opentelemetry-appender-log/CHANGELOG.md | 2 ++ opentelemetry-appender-log/Cargo.toml | 4 +--- opentelemetry-appender-log/src/lib.rs | 13 +++---------- opentelemetry-appender-tracing/CHANGELOG.md | 2 ++ opentelemetry-appender-tracing/Cargo.toml | 3 --- opentelemetry-appender-tracing/src/layer.rs | 3 --- opentelemetry-appender-tracing/src/lib.rs | 3 ++- opentelemetry-sdk/CHANGELOG.md | 1 + opentelemetry-sdk/Cargo.toml | 2 -- opentelemetry-sdk/benches/log_enabled.rs | 2 +- opentelemetry-sdk/src/lib.rs | 2 +- .../src/logs/concurrent_log_processor.rs | 10 +++++----- opentelemetry-sdk/src/logs/export.rs | 2 -- opentelemetry-sdk/src/logs/log_processor.rs | 1 - opentelemetry-sdk/src/logs/logger.rs | 2 -- opentelemetry-sdk/src/logs/simple_log_processor.rs | 2 +- opentelemetry-stdout/Cargo.toml | 2 +- opentelemetry/CHANGELOG.md | 1 + opentelemetry/Cargo.toml | 2 -- opentelemetry/src/lib.rs | 6 +----- opentelemetry/src/logs/logger.rs | 3 --- opentelemetry/src/logs/noop.rs | 1 - scripts/lint.sh | 2 +- stress/Cargo.toml | 6 +++--- 24 files changed, 26 insertions(+), 51 deletions(-) diff --git a/opentelemetry-appender-log/CHANGELOG.md b/opentelemetry-appender-log/CHANGELOG.md index 5c629ff6c5..3689a47b5c 100644 --- a/opentelemetry-appender-log/CHANGELOG.md +++ b/opentelemetry-appender-log/CHANGELOG.md @@ -2,6 +2,8 @@ ## vNext +- The `spec_unstable_logs_enabled` feature flag has been removed. All log features are now always enabled. Any code previously gated by this flag is now available by default. This is a breaking change for users who relied on the feature flag to disable log features. + ## 0.30.0 Released 2025-May-23 diff --git a/opentelemetry-appender-log/Cargo.toml b/opentelemetry-appender-log/Cargo.toml index 25ace0a787..456233c4cd 100644 --- a/opentelemetry-appender-log/Cargo.toml +++ b/opentelemetry-appender-log/Cargo.toml @@ -25,14 +25,12 @@ opentelemetry-semantic-conventions = { version = "0.30", path = "../opentelemetr ] } [features] -spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"] with-serde = ["log/kv_serde", "serde"] experimental_metadata_attributes = ["dep:opentelemetry-semantic-conventions"] [dev-dependencies] opentelemetry_sdk = { path = "../opentelemetry-sdk", features = [ - "testing", - "spec_unstable_logs_enabled", + "testing" ] } opentelemetry-stdout = { workspace = true, features = ["logs"] } log = { workspace = true, features = ["kv_serde"] } diff --git a/opentelemetry-appender-log/src/lib.rs b/opentelemetry-appender-log/src/lib.rs index 7584a25d73..04c43da9b0 100644 --- a/opentelemetry-appender-log/src/lib.rs +++ b/opentelemetry-appender-log/src/lib.rs @@ -89,9 +89,8 @@ //! //! # Feature Flags //! -//! This library provides the following Cargo features: +//! All log features are now always enabled. The previous `spec_unstable_logs_enabled` feature flag has been removed. //! -//! - `spec_unstable_logs_enabled`: Allow users to control the log level. //! - `with-serde`: Support complex values as attributes without stringifying them. //! //! [Logs Bridge API]: https://opentelemetry.io/docs/specs/otel/logs/bridge-api/ @@ -135,14 +134,11 @@ where L: Logger + Send + Sync, { fn enabled(&self, _metadata: &Metadata) -> bool { - #[cfg(feature = "spec_unstable_logs_enabled")] - return self.logger.event_enabled( + self.logger.event_enabled( severity_of_level(_metadata.level()), _metadata.target(), None, - ); - #[cfg(not(feature = "spec_unstable_logs_enabled"))] - true + ) } fn log(&self, record: &Record) { @@ -791,9 +787,6 @@ mod tests { // As a result of using `with_simple_exporter` while building the logger provider, // the processor used is a `SimpleLogProcessor` which has an implementation of `event_enabled` // that always returns true. - #[cfg(feature = "spec_unstable_logs_enabled")] - assert!(otel_log_appender.enabled(&log::Metadata::builder().build())); - #[cfg(not(feature = "spec_unstable_logs_enabled"))] assert!(otel_log_appender.enabled(&log::Metadata::builder().build())); } diff --git a/opentelemetry-appender-tracing/CHANGELOG.md b/opentelemetry-appender-tracing/CHANGELOG.md index 1a1df995d5..babd104c9d 100644 --- a/opentelemetry-appender-tracing/CHANGELOG.md +++ b/opentelemetry-appender-tracing/CHANGELOG.md @@ -2,6 +2,8 @@ ## vNext +- The `spec_unstable_logs_enabled` feature flag has been removed. All log features are now always enabled. Any code previously gated by this flag is now available by default. This is a breaking change for users who relied on the feature flag to disable log features. + ## 0.30.1 Released 2025-June-05 diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index bbf753c002..c6d1ff892d 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -36,14 +36,11 @@ pprof = { version = "0.14", features = ["flamegraph", "criterion"] } [features] default = [] experimental_metadata_attributes = ["dep:tracing-log"] -spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"] experimental_use_tracing_span_context = ["tracing-opentelemetry"] - [[bench]] name = "logs" harness = false -required-features = ["spec_unstable_logs_enabled"] [[bench]] name = "log-attributes" diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index c02aca04a4..23df6593aa 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -220,7 +220,6 @@ where let severity = severity_of_level(metadata.level()); let target = metadata.target(); let name = metadata.name(); - #[cfg(feature = "spec_unstable_logs_enabled")] if !self.logger.event_enabled(severity, target, Some(name)) { // TODO: See if we need internal logs or track the count. return; @@ -916,7 +915,6 @@ mod tests { // no-op } - #[cfg(feature = "spec_unstable_logs_enabled")] fn event_enabled(&self, level: Severity, target: &str, name: Option<&str>) -> bool { // assert that passed in arguments are same as the ones set in the test. assert_eq!(self.severity_level, level); @@ -933,7 +931,6 @@ mod tests { } } - #[cfg(feature = "spec_unstable_logs_enabled")] #[test] fn is_enabled() { // Arrange diff --git a/opentelemetry-appender-tracing/src/lib.rs b/opentelemetry-appender-tracing/src/lib.rs index c868d508a4..98f1e08d5c 100644 --- a/opentelemetry-appender-tracing/src/lib.rs +++ b/opentelemetry-appender-tracing/src/lib.rs @@ -135,7 +135,8 @@ //! > spans to OpenTelemetry in the future. //! //! ## Feature Flags -//! `spec_unstable_logs_enabled`: TODO +//! +//! All log features are now always enabled. The previous `spec_unstable_logs_enabled` feature flag has been removed. //! //! `experimental_metadata_attributes`: TODO //! diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index c0ca5cd22d..fed24f8d4b 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,6 +2,7 @@ ## vNext +- The `spec_unstable_logs_enabled` feature flag has been removed. All log features are now always enabled. Any code previously gated by this flag is now available by default. This is a breaking change for users who relied on the feature flag to disable log features. - TODO: Placeholder for Span processor related things - *Fix* SpanProcessor::on_start is no longer called on non recording spans diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index aa92787ea7..3b7f295571 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -43,7 +43,6 @@ default = ["trace", "metrics", "logs", "internal-logs"] trace = ["opentelemetry/trace", "rand", "percent-encoding"] jaeger_remote_sampler = ["trace", "opentelemetry-http", "http", "serde", "serde_json", "url", "experimental_async_runtime"] logs = ["opentelemetry/logs", "serde_json"] -spec_unstable_logs_enabled = ["logs", "opentelemetry/spec_unstable_logs_enabled"] metrics = ["opentelemetry/metrics"] testing = ["opentelemetry/testing", "trace", "metrics", "logs", "rt-tokio", "rt-tokio-current-thread", "tokio/macros", "tokio/rt-multi-thread"] experimental_async_runtime = [] @@ -92,7 +91,6 @@ harness = false [[bench]] name = "log_enabled" harness = false -required-features = ["spec_unstable_logs_enabled", "experimental_logs_concurrent_log_processor"] [[bench]] name = "tracer_creation" diff --git a/opentelemetry-sdk/benches/log_enabled.rs b/opentelemetry-sdk/benches/log_enabled.rs index 164dccf0b3..66349d277a 100644 --- a/opentelemetry-sdk/benches/log_enabled.rs +++ b/opentelemetry-sdk/benches/log_enabled.rs @@ -9,7 +9,7 @@ | exporter_disabled_simple_processor | 5.3 ns | */ -// cargo bench --bench log_enabled --features="spec_unstable_logs_enabled,experimental_logs_concurrent_log_processor" +// cargo bench --bench log_enabled --features="experimental_logs_concurrent_log_processor" use criterion::{criterion_group, criterion_main, Criterion}; use opentelemetry::logs::{Logger, LoggerProvider}; diff --git a/opentelemetry-sdk/src/lib.rs b/opentelemetry-sdk/src/lib.rs index 8ee470b828..3df276c161 100644 --- a/opentelemetry-sdk/src/lib.rs +++ b/opentelemetry-sdk/src/lib.rs @@ -86,7 +86,7 @@ //! //! For `logs` the following feature flags are available: //! -//! * `spec_unstable_logs_enabled`: control the log level +//! All log features are now always enabled. The previous `spec_unstable_logs_enabled` feature flag has been removed. //! //! Support for recording and exporting telemetry asynchronously and perform //! metrics aggregation can be added via the following flags: diff --git a/opentelemetry-sdk/src/logs/concurrent_log_processor.rs b/opentelemetry-sdk/src/logs/concurrent_log_processor.rs index 052e3d9796..bc2f43f5b3 100644 --- a/opentelemetry-sdk/src/logs/concurrent_log_processor.rs +++ b/opentelemetry-sdk/src/logs/concurrent_log_processor.rs @@ -48,7 +48,11 @@ impl LogProcessor for SimpleConcurrentLogProcessor { self.exporter.shutdown_with_timeout(timeout) } - #[cfg(feature = "spec_unstable_logs_enabled")] + fn set_resource(&mut self, resource: &Resource) { + self.exporter.set_resource(resource); + } + + // event_enabled is now always enabled and delegates to exporter #[inline] fn event_enabled( &self, @@ -58,8 +62,4 @@ impl LogProcessor for SimpleConcurrentLogProcessor { ) -> bool { self.exporter.event_enabled(level, target, name) } - - fn set_resource(&mut self, resource: &Resource) { - self.exporter.set_resource(resource); - } } diff --git a/opentelemetry-sdk/src/logs/export.rs b/opentelemetry-sdk/src/logs/export.rs index af0653d50c..8f2ce4d477 100644 --- a/opentelemetry-sdk/src/logs/export.rs +++ b/opentelemetry-sdk/src/logs/export.rs @@ -2,7 +2,6 @@ use crate::error::OTelSdkResult; use crate::logs::SdkLogRecord; use crate::Resource; -#[cfg(feature = "spec_unstable_logs_enabled")] use opentelemetry::logs::Severity; use opentelemetry::InstrumentationScope; use std::fmt::Debug; @@ -143,7 +142,6 @@ pub trait LogExporter: Send + Sync + Debug { fn shutdown(&self) -> OTelSdkResult { self.shutdown_with_timeout(time::Duration::from_secs(5)) } - #[cfg(feature = "spec_unstable_logs_enabled")] /// Check if logs are enabled. fn event_enabled(&self, _level: Severity, _target: &str, _name: Option<&str>) -> bool { // By default, all logs are enabled diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index 3f7fa62975..1842f501f9 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -64,7 +64,6 @@ pub trait LogProcessor: Send + Sync + Debug { fn shutdown(&self) -> OTelSdkResult { self.shutdown_with_timeout(Duration::from_secs(5)) } - #[cfg(feature = "spec_unstable_logs_enabled")] /// Check if logging is enabled fn event_enabled(&self, _level: Severity, _target: &str, _name: Option<&str>) -> bool { // By default, all logs are enabled diff --git a/opentelemetry-sdk/src/logs/logger.rs b/opentelemetry-sdk/src/logs/logger.rs index f76a43792f..f21dbc6b93 100644 --- a/opentelemetry-sdk/src/logs/logger.rs +++ b/opentelemetry-sdk/src/logs/logger.rs @@ -1,7 +1,6 @@ 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; @@ -52,7 +51,6 @@ impl opentelemetry::logs::Logger for SdkLogger { } } - #[cfg(feature = "spec_unstable_logs_enabled")] #[inline] fn event_enabled(&self, level: Severity, target: &str, name: Option<&str>) -> bool { if Context::is_current_telemetry_suppressed() { diff --git a/opentelemetry-sdk/src/logs/simple_log_processor.rs b/opentelemetry-sdk/src/logs/simple_log_processor.rs index a52bd548d8..7856c91d49 100644 --- a/opentelemetry-sdk/src/logs/simple_log_processor.rs +++ b/opentelemetry-sdk/src/logs/simple_log_processor.rs @@ -134,7 +134,7 @@ impl LogProcessor for SimpleLogProcessor { } } - #[cfg(feature = "spec_unstable_logs_enabled")] + // event_enabled is now always enabled and delegates to exporter #[inline] fn event_enabled( &self, diff --git a/opentelemetry-stdout/Cargo.toml b/opentelemetry-stdout/Cargo.toml index 305bd0eb51..9b2014972a 100644 --- a/opentelemetry-stdout/Cargo.toml +++ b/opentelemetry-stdout/Cargo.toml @@ -24,7 +24,7 @@ rustdoc-args = ["--cfg", "docsrs"] default = ["trace", "metrics", "logs"] trace = ["opentelemetry/trace", "opentelemetry_sdk/trace"] metrics = ["opentelemetry/metrics", "opentelemetry_sdk/metrics"] -logs = ["opentelemetry/logs", "opentelemetry_sdk/logs", "opentelemetry_sdk/spec_unstable_logs_enabled"] +logs = ["opentelemetry/logs", "opentelemetry_sdk/logs"] [dependencies] chrono = { workspace = true, features = ["now"] } diff --git a/opentelemetry/CHANGELOG.md b/opentelemetry/CHANGELOG.md index e5aca778da..18cabeed6b 100644 --- a/opentelemetry/CHANGELOG.md +++ b/opentelemetry/CHANGELOG.md @@ -2,6 +2,7 @@ ## vNext +- The `spec_unstable_logs_enabled` feature flag has been removed. All log features are now always enabled. Any code previously gated by this flag is now available by default. This is a breaking change for users who relied on the feature flag to disable log features. - Add `get_all` method to `opentelemetry::propagation::Extractor` to return all values of the given propagation key and provide a default implementation. ## 0.30.0 diff --git a/opentelemetry/Cargo.toml b/opentelemetry/Cargo.toml index 49994d0280..7fc2ef5f8a 100644 --- a/opentelemetry/Cargo.toml +++ b/opentelemetry/Cargo.toml @@ -38,11 +38,9 @@ trace = ["futures", "thiserror"] metrics = [] testing = ["trace"] logs = [] -spec_unstable_logs_enabled = ["logs"] internal-logs = ["tracing"] [dev-dependencies] -opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["spec_unstable_logs_enabled"]} # for documentation tests criterion = { workspace = true } rand = { workspace = true, features = ["os_rng", "thread_rng"] } tokio = { version = "1.0", features = ["full"] } diff --git a/opentelemetry/src/lib.rs b/opentelemetry/src/lib.rs index ebed7960ea..d971707799 100644 --- a/opentelemetry/src/lib.rs +++ b/opentelemetry/src/lib.rs @@ -163,11 +163,7 @@ //! //! The default feature flags are ["trace", "metrics", "logs", "internal-logs"]. //! -//! The following feature flags provides additional configuration for `logs`: -//! * `spec_unstable_logs_enabled`: Allow users to control the log level -//! -//! The following feature flags enable APIs defined in OpenTelemetry specification that is in experimental phase: -//! * `otel_unstable`: Includes unstable APIs. There are no features behind this flag at the moment. +//! All log features are now always enabled. The previous `spec_unstable_logs_enabled` feature flag has been removed. //! //! # Related Crates //! diff --git a/opentelemetry/src/logs/logger.rs b/opentelemetry/src/logs/logger.rs index 38fda2e8fb..4e20ca10b6 100644 --- a/opentelemetry/src/logs/logger.rs +++ b/opentelemetry/src/logs/logger.rs @@ -1,8 +1,6 @@ use std::borrow::Cow; use crate::{logs::LogRecord, InstrumentationScope}; - -#[cfg(feature = "spec_unstable_logs_enabled")] use super::Severity; /// The interface for emitting [`LogRecord`]s. @@ -19,7 +17,6 @@ pub trait Logger { /// [`Context`]: crate::Context fn emit(&self, record: Self::LogRecord); - #[cfg(feature = "spec_unstable_logs_enabled")] /// Check if the given log level is enabled. fn event_enabled(&self, level: Severity, target: &str, name: Option<&str>) -> bool; } diff --git a/opentelemetry/src/logs/noop.rs b/opentelemetry/src/logs/noop.rs index 10add3139b..9fbd228f1d 100644 --- a/opentelemetry/src/logs/noop.rs +++ b/opentelemetry/src/logs/noop.rs @@ -78,7 +78,6 @@ impl Logger for NoopLogger { NoopLogRecord {} } fn emit(&self, _record: Self::LogRecord) {} - #[cfg(feature = "spec_unstable_logs_enabled")] fn event_enabled(&self, _level: super::Severity, _target: &str, _name: Option<&str>) -> bool { false } diff --git a/scripts/lint.sh b/scripts/lint.sh index d5a9c41464..997138a952 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -21,7 +21,7 @@ if rustup component add clippy && \ cargo clippy --manifest-path=opentelemetry-prometheus/Cargo.toml --all-targets --all-features -- \ -Dwarnings - cargo_feature opentelemetry "trace,metrics,logs,spec_unstable_logs_enabled,testing" + cargo_feature opentelemetry "trace,metrics,logs,testing" cargo_feature opentelemetry-otlp "default" cargo_feature opentelemetry-otlp "default,tls" diff --git a/stress/Cargo.toml b/stress/Cargo.toml index 9063b75d79..e124bf984f 100644 --- a/stress/Cargo.toml +++ b/stress/Cargo.toml @@ -53,9 +53,9 @@ bench = false ctrlc = { workspace = true } lazy_static = { workspace = true } num_cpus = { workspace = true } -opentelemetry = { path = "../opentelemetry", features = ["metrics", "logs", "trace", "spec_unstable_logs_enabled"] } -opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["metrics", "logs", "trace", "spec_unstable_logs_enabled", "experimental_logs_concurrent_log_processor", "experimental_metrics_custom_reader"] } -opentelemetry-appender-tracing = { workspace = true, features = ["spec_unstable_logs_enabled"] } +opentelemetry = { path = "../opentelemetry", features = ["metrics", "logs", "trace"] } +opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["metrics", "logs", "trace", "experimental_logs_concurrent_log_processor", "experimental_metrics_custom_reader"] } +opentelemetry-appender-tracing = { workspace = true } rand = { workspace = true, features = ["small_rng", "os_rng"] } tracing = { workspace = true, features = ["std"]} tracing-subscriber = { workspace = true, features = ["registry", "std"] } From 24b84533258bf94cb1187d51c995a503a726dfcf Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Wed, 18 Jun 2025 18:28:55 +0000 Subject: [PATCH 2/2] one more fix --- opentelemetry-sdk/src/logs/log_processor.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index 1842f501f9..16dd696494 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -29,7 +29,6 @@ use crate::error::OTelSdkResult; use crate::{logs::SdkLogRecord, Resource}; -#[cfg(feature = "spec_unstable_logs_enabled")] use opentelemetry::logs::Severity; use opentelemetry::InstrumentationScope;