Skip to content

feat: Stabilize logger.enabled by removing spec_unstable_logs_enabled feature flag #3036

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions opentelemetry-appender-log/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## vNext

- Remove experimental `spec_unstable_logs_enabled` feature flag - logger.enabled functionality is now stabilized and always available.

## 0.30.0

Released 2025-May-23
Expand Down
2 changes: 0 additions & 2 deletions opentelemetry-appender-log/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
] }
opentelemetry-stdout = { workspace = true, features = ["logs"] }
log = { workspace = true, features = ["kv_serde"] }
Expand Down
11 changes: 2 additions & 9 deletions opentelemetry-appender-log/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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()));
}

Expand Down
2 changes: 2 additions & 0 deletions opentelemetry-appender-tracing/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## vNext

- **Breaking** Remove `spec_unstable_logs_enabled` feature flag - logger.enabled functionality is now always available.

## 0.30.1

Released 2025-June-05
Expand Down
2 changes: 0 additions & 2 deletions opentelemetry-appender-tracing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,12 @@ 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"
Expand Down
3 changes: 0 additions & 3 deletions opentelemetry-appender-tracing/src/layer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -933,7 +931,6 @@ mod tests {
}
}

#[cfg(feature = "spec_unstable_logs_enabled")]
#[test]
fn is_enabled() {
// Arrange
Expand Down
1 change: 0 additions & 1 deletion opentelemetry-appender-tracing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,6 @@
//! > spans to OpenTelemetry in the future.
//!
//! ## Feature Flags
//! `spec_unstable_logs_enabled`: TODO
//!
//! `experimental_metadata_attributes`: TODO
//!
Expand Down
1 change: 1 addition & 0 deletions opentelemetry-sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

- TODO: Placeholder for Span processor related things
- *Fix* SpanProcessor::on_start is no longer called on non recording spans
- **Breaking** Remove `spec_unstable_logs_enabled` feature flag - logger.enabled functionality is now always available.

## 0.30.0

Expand Down
3 changes: 1 addition & 2 deletions opentelemetry-sdk/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 = []
Expand Down Expand Up @@ -92,7 +91,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"
Expand Down
2 changes: 1 addition & 1 deletion opentelemetry-sdk/benches/log_enabled.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down
2 changes: 0 additions & 2 deletions opentelemetry-sdk/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,6 @@
//!
//! 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:
//!
Expand Down
1 change: 0 additions & 1 deletion opentelemetry-sdk/src/logs/concurrent_log_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ impl<T: LogExporter> LogProcessor for SimpleConcurrentLogProcessor<T> {
self.exporter.shutdown_with_timeout(timeout)
}

#[cfg(feature = "spec_unstable_logs_enabled")]
#[inline]
fn event_enabled(
&self,
Expand Down
2 changes: 0 additions & 2 deletions opentelemetry-sdk/src/logs/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
2 changes: 0 additions & 2 deletions opentelemetry-sdk/src/logs/log_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -64,7 +63,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
Expand Down
2 changes: 0 additions & 2 deletions opentelemetry-sdk/src/logs/logger.rs
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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() {
Expand Down
1 change: 0 additions & 1 deletion opentelemetry-sdk/src/logs/simple_log_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,6 @@ impl<T: LogExporter> LogProcessor for SimpleLogProcessor<T> {
}
}

#[cfg(feature = "spec_unstable_logs_enabled")]
#[inline]
fn event_enabled(
&self,
Expand Down
2 changes: 1 addition & 1 deletion opentelemetry-stdout/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"] }
Expand Down
1 change: 1 addition & 0 deletions opentelemetry/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## vNext

- Add `get_all` method to `opentelemetry::propagation::Extractor` to return all values of the given propagation key and provide a default implementation.
- **Breaking** Remove `spec_unstable_logs_enabled` feature flag - logger.enabled functionality is now always available.

## 0.30.0

Expand Down
3 changes: 1 addition & 2 deletions opentelemetry/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,10 @@ 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"] }
Expand Down
3 changes: 0 additions & 3 deletions opentelemetry/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
//!
Expand Down
3 changes: 0 additions & 3 deletions opentelemetry/src/logs/logger.rs
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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;
}
Expand Down
1 change: 0 additions & 1 deletion opentelemetry/src/logs/noop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
2 changes: 1 addition & 1 deletion scripts/lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
6 changes: 3 additions & 3 deletions stress/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"] }
Expand Down