diff --git a/opentelemetry-otlp/CHANGELOG.md b/opentelemetry-otlp/CHANGELOG.md index 40d4d73d56..4dede6e366 100644 --- a/opentelemetry-otlp/CHANGELOG.md +++ b/opentelemetry-otlp/CHANGELOG.md @@ -2,6 +2,9 @@ ## vNext +- **Breaking** [1994](https://github.com/open-telemetry/opentelemetry-rust/pull/1994) The logrecord event-name is added as attribute with +key `name` only if the feature flag `populate-logs-event-name` is enabled. + ## v0.17.0 - Add "metrics", "logs" to default features. With this, default feature list is diff --git a/opentelemetry-otlp/Cargo.toml b/opentelemetry-otlp/Cargo.toml index 0eac9430d1..4961c26300 100644 --- a/opentelemetry-otlp/Cargo.toml +++ b/opentelemetry-otlp/Cargo.toml @@ -56,6 +56,7 @@ temp-env = { workspace = true } trace = ["opentelemetry/trace", "opentelemetry_sdk/trace", "opentelemetry-proto/trace"] metrics = ["opentelemetry/metrics", "opentelemetry_sdk/metrics", "opentelemetry-proto/metrics"] logs = ["opentelemetry/logs", "opentelemetry_sdk/logs", "opentelemetry-proto/logs"] +populate-logs-event-name = ["opentelemetry-proto/populate-logs-event-name"] # add ons serialize = ["serde", "serde_json"] diff --git a/opentelemetry-otlp/src/lib.rs b/opentelemetry-otlp/src/lib.rs index cb3077d23c..7326bc6ac3 100644 --- a/opentelemetry-otlp/src/lib.rs +++ b/opentelemetry-otlp/src/lib.rs @@ -91,6 +91,8 @@ //! //! The following feature flags generate additional code and types: //! * `serialize`: Enables serialization support for type defined in this create via `serde`. +//! * `populate-logs-event-name`: Enables sending `LogRecord::event_name` as an attribute +//! with the key `name` //! //! The following feature flags offer additional configurations on gRPC: //! diff --git a/opentelemetry-proto/Cargo.toml b/opentelemetry-proto/Cargo.toml index dbf9743ef4..5b94b03ef7 100644 --- a/opentelemetry-proto/Cargo.toml +++ b/opentelemetry-proto/Cargo.toml @@ -30,7 +30,6 @@ path = "tests/json_deserialize.rs" [features] default = ["full"] - full = ["gen-tonic", "trace", "logs", "metrics", "zpages", "with-serde"] # crates used to generate rs files @@ -47,6 +46,7 @@ testing = ["opentelemetry/testing"] # add ons with-schemars = ["schemars"] with-serde = ["serde", "hex"] +populate-logs-event-name = [] [dependencies] tonic = { workspace = true, optional = true, features = ["codegen", "prost"] } diff --git a/opentelemetry-proto/src/transform/logs.rs b/opentelemetry-proto/src/transform/logs.rs index 933e2905df..dfd845c5d8 100644 --- a/opentelemetry-proto/src/transform/logs.rs +++ b/opentelemetry-proto/src/transform/logs.rs @@ -89,7 +89,7 @@ pub mod tonic { time_unix_nano: log_record.timestamp.map(to_nanos).unwrap_or_default(), observed_time_unix_nano: to_nanos(log_record.observed_timestamp.unwrap()), attributes: { - let mut attributes: Vec = log_record + let attributes: Vec = log_record .attributes_iter() .map(|kv| KeyValue { key: kv.0.to_string(), @@ -98,14 +98,22 @@ pub mod tonic { }), }) .collect(); - if let Some(event_name) = log_record.event_name.as_ref() { - attributes.push(KeyValue { - key: "name".into(), - value: Some(AnyValue { - value: Some(Value::StringValue(event_name.to_string())), - }), - }); + #[cfg(feature = "populate-logs-event-name")] + { + if let Some(event_name) = &log_record.event_name { + let mut attributes_with_name = attributes; + attributes_with_name.push(KeyValue { + key: "name".into(), + value: Some(AnyValue { + value: Some(Value::StringValue(event_name.to_string())), + }), + }); + attributes_with_name + } else { + attributes + } } + #[cfg(not(feature = "populate-logs-event-name"))] attributes }, severity_number: severity_number.into(), diff --git a/opentelemetry-stdout/CHANGELOG.md b/opentelemetry-stdout/CHANGELOG.md index bad2b2bdf4..e3701221ee 100644 --- a/opentelemetry-stdout/CHANGELOG.md +++ b/opentelemetry-stdout/CHANGELOG.md @@ -2,6 +2,9 @@ ## vNext +- **Breaking** [1994](https://github.com/open-telemetry/opentelemetry-rust/pull/1994) The logrecord event-name is added as attribute with +key `name` only if the feature flag `populate-logs-event-name` is enabled. + ## v0.5.0 - Update `opentelemetry` dependency version to 0.24 diff --git a/opentelemetry-stdout/Cargo.toml b/opentelemetry-stdout/Cargo.toml index ecbbdbe4a0..a2715cbe04 100644 --- a/opentelemetry-stdout/Cargo.toml +++ b/opentelemetry-stdout/Cargo.toml @@ -20,6 +20,7 @@ default = ["trace", "metrics", "logs"] trace = ["opentelemetry/trace", "opentelemetry_sdk/trace", "futures-util"] metrics = ["async-trait", "opentelemetry/metrics", "opentelemetry_sdk/metrics"] logs = ["opentelemetry/logs", "opentelemetry_sdk/logs", "async-trait", "thiserror", "opentelemetry_sdk/logs_level_enabled"] +populate-logs-event-name = [] [dependencies] async-trait = { workspace = true, optional = true } diff --git a/opentelemetry-stdout/src/lib.rs b/opentelemetry-stdout/src/lib.rs index 52509a67ca..4ab74a82be 100644 --- a/opentelemetry-stdout/src/lib.rs +++ b/opentelemetry-stdout/src/lib.rs @@ -4,6 +4,17 @@ //! exhaustive and is subject to change at any time. //! //! +//! # Feature Flags +//! The following feature flags can enable exporters for different telemetry signals: +//! +//! * `trace`: Includes the trace exporters (enabled by default). +//! * `metrics`: Includes the metrics exporters. +//! * `logs`: Includes the logs exporters. +//! +//! The following feature flags generate additional code and types: +//! * `populate-logs-event-name`: Enables sending `LogRecord::event_name` as an attribute +//! with the key `name` +//! //! # Examples //! //! ```no_run diff --git a/opentelemetry-stdout/src/logs/transform.rs b/opentelemetry-stdout/src/logs/transform.rs index 48757f639e..2f3199bd25 100644 --- a/opentelemetry-stdout/src/logs/transform.rs +++ b/opentelemetry-stdout/src/logs/transform.rs @@ -108,17 +108,25 @@ impl From for LogRecord { fn from(value: opentelemetry_sdk::export::logs::LogData) -> Self { LogRecord { attributes: { - let mut attributes = value + let attributes = value .record .attributes_iter() .map(|(k, v)| KeyValue::from((k.clone(), v.clone()))) // Map each pair to a KeyValue .collect::>(); // Collect into a Vecs + + #[cfg(feature = "populate-logs-event-name")] if let Some(event_name) = &value.record.event_name { - attributes.push(KeyValue::from(( + let mut attributes_with_name = attributes; + attributes_with_name.push(KeyValue::from(( "name".into(), opentelemetry::Value::String(event_name.clone().into()), ))); + attributes_with_name + } else { + attributes } + + #[cfg(not(feature = "populate-logs-event-name"))] attributes }, trace_id: value