diff --git a/opentelemetry-appender-log/CHANGELOG.md b/opentelemetry-appender-log/CHANGELOG.md index 6889dc13a0..5d91eca610 100644 --- a/opentelemetry-appender-log/CHANGELOG.md +++ b/opentelemetry-appender-log/CHANGELOG.md @@ -2,6 +2,8 @@ ## vNext +- **Breaking** Stabilized `logger.enabled` by removing the `spec_unstable_logs_enabled` feature flag. Log level filtering is now always enabled. + ## 0.31.0 Released 2025-Sep-25 diff --git a/opentelemetry-appender-log/Cargo.toml b/opentelemetry-appender-log/Cargo.toml index a025803b98..e464eeb4e9 100644 --- a/opentelemetry-appender-log/Cargo.toml +++ b/opentelemetry-appender-log/Cargo.toml @@ -21,12 +21,12 @@ serde = { workspace = true, optional = true, features = ["std"] } opentelemetry-semantic-conventions = { workspace = true, optional = true, features = ["semconv_experimental"] } [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 = { workspace = true, features = ["testing", "spec_unstable_logs_enabled"] } +opentelemetry_sdk = { workspace = true, features = ["testing"] } opentelemetry-stdout = { workspace = true, features = ["logs"] } log = { workspace = true, features = ["kv_serde"] } tokio = { workspace = true } diff --git a/opentelemetry-appender-log/src/lib.rs b/opentelemetry-appender-log/src/lib.rs index e12f20b44e..1fc418911d 100644 --- a/opentelemetry-appender-log/src/lib.rs +++ b/opentelemetry-appender-log/src/lib.rs @@ -91,7 +91,6 @@ //! //! This library provides the following Cargo features: //! -//! - `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 3f966ec2e1..12f74226e0 100644 --- a/opentelemetry-appender-tracing/CHANGELOG.md +++ b/opentelemetry-appender-tracing/CHANGELOG.md @@ -2,6 +2,8 @@ ## vNext +- **Breaking** Stabilized `logger.enabled` by removing the `spec_unstable_logs_enabled` feature flag. Event filtering is now always enabled. + ## 0.31.1 Released 2025-Oct-1 diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index 22284d289a..0c2eb628a8 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -36,7 +36,7 @@ pprof = { workspace = true } [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_profiling = [] @@ -44,7 +44,6 @@ bench_profiling = [] [[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 d5f2435ab2..45c10be6c2 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; @@ -919,7 +918,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); @@ -940,7 +938,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 bee16d4b9e..e018c9805e 100644 --- a/opentelemetry-appender-tracing/src/lib.rs +++ b/opentelemetry-appender-tracing/src/lib.rs @@ -135,7 +135,6 @@ //! > spans to OpenTelemetry in the future. //! //! ## Feature Flags -//! `spec_unstable_logs_enabled`: TODO //! //! `experimental_metadata_attributes`: TODO //! diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index 15c675ac1b..8fb206e7de 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,6 +2,8 @@ ## vNext +- **Breaking** Stabilized `logger.enabled` by removing the `spec_unstable_logs_enabled` feature flag. The `event_enabled` method on `LogProcessor` and `LogExporter` traits is now always available. + ## 0.31.0 Released 2025-Sep-25 diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index d4eaae2b02..1d7055d2af 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -43,7 +43,7 @@ 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"] -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 = [] @@ -97,7 +97,7 @@ harness = false [[bench]] name = "log_enabled" harness = false -required-features = ["spec_unstable_logs_enabled", "experimental_logs_concurrent_log_processor"] +required-features = ["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 31bba54e78..c1381f8cb4 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 8f8e5a8653..3fd8e4db09 100644 --- a/opentelemetry-sdk/src/lib.rs +++ b/opentelemetry-sdk/src/lib.rs @@ -84,10 +84,6 @@ //! //! * `jaeger_remote_sampler`: Enables the [Jaeger remote sampler](https://www.jaegertracing.io/docs/1.53/sampling/). //! -//! For `logs` the following feature flags are available: -//! -//! * `spec_unstable_logs_enabled`: control the log level -//! //! 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..640323cd52 100644 --- a/opentelemetry-sdk/src/logs/concurrent_log_processor.rs +++ b/opentelemetry-sdk/src/logs/concurrent_log_processor.rs @@ -48,7 +48,6 @@ impl LogProcessor for SimpleConcurrentLogProcessor { self.exporter.shutdown_with_timeout(timeout) } - #[cfg(feature = "spec_unstable_logs_enabled")] #[inline] fn event_enabled( &self, 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 de882e5f6f..ece5c8e092 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -28,8 +28,6 @@ use crate::error::OTelSdkResult; use crate::{logs::SdkLogRecord, Resource}; - -#[cfg(feature = "spec_unstable_logs_enabled")] use opentelemetry::logs::Severity; use opentelemetry::{otel_warn, InstrumentationScope}; @@ -79,7 +77,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 860922adf0..eaa0c009c1 100644 --- a/opentelemetry-sdk/src/logs/logger.rs +++ b/opentelemetry-sdk/src/logs/logger.rs @@ -4,8 +4,6 @@ use super::{SdkLogRecord, SdkLoggerProvider}; #[cfg(feature = "trace")] use opentelemetry::trace::TraceContextExt; use opentelemetry::{Context, InstrumentationScope}; - -#[cfg(feature = "spec_unstable_logs_enabled")] use opentelemetry::logs::Severity; use opentelemetry::time::now; @@ -57,7 +55,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 5c8642221a..ac634ded20 100644 --- a/opentelemetry-sdk/src/logs/simple_log_processor.rs +++ b/opentelemetry-sdk/src/logs/simple_log_processor.rs @@ -135,7 +135,6 @@ impl LogProcessor for SimpleLogProcessor { } } - #[cfg(feature = "spec_unstable_logs_enabled")] #[inline] fn event_enabled( &self, diff --git a/opentelemetry-stdout/Cargo.toml b/opentelemetry-stdout/Cargo.toml index 3e6f778968..392802b327 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 a2400df504..2e37174eaa 100644 --- a/opentelemetry/CHANGELOG.md +++ b/opentelemetry/CHANGELOG.md @@ -2,6 +2,7 @@ ## vNext +- **Breaking** Stabilized `logger.enabled` by removing the `spec_unstable_logs_enabled` feature flag. The `event_enabled` method on `Logger` trait is now always available. - Add `reserve` method to `opentelemetry::propagation::Injector` to hint at the number of elements that will be added to avoid multiple resize operations of the underlying data structure. Has an empty default implementation. ## v0.31.0 diff --git a/opentelemetry/Cargo.toml b/opentelemetry/Cargo.toml index 4f58092946..0ce8f9492e 100644 --- a/opentelemetry/Cargo.toml +++ b/opentelemetry/Cargo.toml @@ -38,11 +38,11 @@ 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 +opentelemetry_sdk = { path = "../opentelemetry-sdk"} # 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..d08e087445 100644 --- a/opentelemetry/src/lib.rs +++ b/opentelemetry/src/lib.rs @@ -163,9 +163,6 @@ //! //! 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. //! 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/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"] }