From 63f822d4a349a9242e7e269177699d66fc0d47e4 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Thu, 11 Jul 2024 11:17:45 -0700 Subject: [PATCH 01/12] initial commit --- opentelemetry-appender-tracing/src/layer.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index 45eb85dc92..6af132787b 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -39,13 +39,6 @@ impl<'a, LR: LogRecord> EventVisitor<'a, LR> { fn new(log_record: &'a mut LR) -> Self { EventVisitor { log_record } } - fn visit_metadata(&mut self, meta: &Metadata) { - self.log_record - .add_attribute(Key::new("name"), AnyValue::from(meta.name())); - - #[cfg(feature = "experimental_metadata_attributes")] - self.visit_experimental_metadata(meta); - } #[cfg(feature = "experimental_metadata_attributes")] fn visit_experimental_metadata(&mut self, meta: &Metadata) { @@ -170,15 +163,18 @@ where //let mut log_record: LogRecord = LogRecord::default(); let mut log_record = self.logger.create_log_record(); + log_record.set_event_name(meta.name()); log_record.set_severity_number(severity_of_level(meta.level())); log_record.set_severity_text(meta.level().to_string().into()); log_record.set_target(meta.target().to_string()); + #[cfg(feature = "experimental_metadata_attributes")] + self.visit_experimental_metadata(meta); // Visit fields. let mut visitor = EventVisitor::new(&mut log_record); - visitor.visit_metadata(meta); // Visit fields. event.record(&mut visitor); + //emit record self.logger.emit(log_record); } From d680f4aaaa9122260d0886ccc6c397dcdcd8b374 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Thu, 11 Jul 2024 11:19:26 -0700 Subject: [PATCH 02/12] update order --- opentelemetry-appender-tracing/src/layer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index 6af132787b..3c3bc9de00 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -163,10 +163,10 @@ where //let mut log_record: LogRecord = LogRecord::default(); let mut log_record = self.logger.create_log_record(); + log_record.set_target(meta.target().to_string()); log_record.set_event_name(meta.name()); log_record.set_severity_number(severity_of_level(meta.level())); log_record.set_severity_text(meta.level().to_string().into()); - log_record.set_target(meta.target().to_string()); #[cfg(feature = "experimental_metadata_attributes")] self.visit_experimental_metadata(meta); // Visit fields. From f3a26c623a204cb3da711f5cc6d6047ac2c53736 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Thu, 11 Jul 2024 11:47:41 -0700 Subject: [PATCH 03/12] build failure --- opentelemetry-appender-tracing/src/layer.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index 3c3bc9de00..70b8172149 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -3,7 +3,9 @@ use opentelemetry::{ Key, }; use std::borrow::Cow; -use tracing_core::{Level, Metadata}; +use tracing_core::Level; +#[cfg(feature = "experimental_metadata_attributes")] +use tracing_core::Metadata; #[cfg(feature = "experimental_metadata_attributes")] use tracing_log::NormalizeEvent; use tracing_subscriber::Layer; @@ -168,9 +170,9 @@ where log_record.set_severity_number(severity_of_level(meta.level())); log_record.set_severity_text(meta.level().to_string().into()); #[cfg(feature = "experimental_metadata_attributes")] - self.visit_experimental_metadata(meta); // Visit fields. - let mut visitor = EventVisitor::new(&mut log_record); + #[cfg(feature = "experimental_metadata_attributes")] + visitor.visit_experimental_metadata(meta); // Visit fields. event.record(&mut visitor); From 699dcb8547e088fa18ef7a9bdf5f4bc96929efc2 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Thu, 11 Jul 2024 12:00:59 -0700 Subject: [PATCH 04/12] fix test --- opentelemetry-appender-tracing/src/layer.rs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/opentelemetry-appender-tracing/src/layer.rs b/opentelemetry-appender-tracing/src/layer.rs index 70b8172149..91124c8464 100644 --- a/opentelemetry-appender-tracing/src/layer.rs +++ b/opentelemetry-appender-tracing/src/layer.rs @@ -169,7 +169,6 @@ where log_record.set_event_name(meta.name()); log_record.set_severity_number(severity_of_level(meta.level())); log_record.set_severity_text(meta.level().to_string().into()); - #[cfg(feature = "experimental_metadata_attributes")] let mut visitor = EventVisitor::new(&mut log_record); #[cfg(feature = "experimental_metadata_attributes")] visitor.visit_experimental_metadata(meta); @@ -259,10 +258,9 @@ mod tests { .clone() .expect("Attributes are expected"); #[cfg(not(feature = "experimental_metadata_attributes"))] - assert_eq!(attributes.len(), 4); + assert_eq!(attributes.len(), 3); #[cfg(feature = "experimental_metadata_attributes")] - assert_eq!(attributes.len(), 9); - assert!(attributes.contains(&(Key::new("name"), "my-event-name".into()))); + assert_eq!(attributes.len(), 8); assert!(attributes.contains(&(Key::new("event_id"), 20.into()))); assert!(attributes.contains(&(Key::new("user_name"), "otel".into()))); assert!(attributes.contains(&(Key::new("user_email"), "otel@opentelemetry.io".into()))); @@ -356,10 +354,9 @@ mod tests { .clone() .expect("Attributes are expected"); #[cfg(not(feature = "experimental_metadata_attributes"))] - assert_eq!(attributes.len(), 4); + assert_eq!(attributes.len(), 3); #[cfg(feature = "experimental_metadata_attributes")] - assert_eq!(attributes.len(), 9); - assert!(attributes.contains(&(Key::new("name"), "my-event-name".into()))); + assert_eq!(attributes.len(), 8); assert!(attributes.contains(&(Key::new("event_id"), 20.into()))); assert!(attributes.contains(&(Key::new("user_name"), "otel".into()))); assert!(attributes.contains(&(Key::new("user_email"), "otel@opentelemetry.io".into()))); @@ -417,6 +414,7 @@ mod tests { assert!(log.record.trace_context.is_none()); // Validate attributes + #[cfg(feature = "experimental_metadata_attributes")] let attributes: Vec<(Key, AnyValue)> = log .record .attributes @@ -425,9 +423,7 @@ mod tests { // Attributes can be polluted when we don't use this feature. #[cfg(feature = "experimental_metadata_attributes")] - assert_eq!(attributes.len(), 6); - - assert!(attributes.contains(&(Key::new("name"), "log event".into()))); + assert_eq!(attributes.len(), 5); #[cfg(feature = "experimental_metadata_attributes")] { @@ -514,6 +510,7 @@ mod tests { ); // validate attributes. + #[cfg(feature = "experimental_metadata_attributes")] let attributes: Vec<(Key, AnyValue)> = log .record .attributes @@ -522,9 +519,7 @@ mod tests { // Attributes can be polluted when we don't use this feature. #[cfg(feature = "experimental_metadata_attributes")] - assert_eq!(attributes.len(), 6); - - assert!(attributes.contains(&(Key::new("name"), "log event".into()))); + assert_eq!(attributes.len(), 5); #[cfg(feature = "experimental_metadata_attributes")] { From 7fb8f47151c92266a78a54be30d5807319f3b379 Mon Sep 17 00:00:00 2001 From: Lalit Date: Fri, 12 Jul 2024 11:04:57 -0700 Subject: [PATCH 05/12] add changelog --- opentelemetry-appender-tracing/CHANGELOG.md | 4 ++++ opentelemetry-otlp/CHANGELOG.md | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/opentelemetry-appender-tracing/CHANGELOG.md b/opentelemetry-appender-tracing/CHANGELOG.md index 67d1f55dc7..dc7671c0e2 100644 --- a/opentelemetry-appender-tracing/CHANGELOG.md +++ b/opentelemetry-appender-tracing/CHANGELOG.md @@ -5,6 +5,10 @@ - [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) Utilize the `LogRecord::set_target()` method to pass the tracing target to the SDK. 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. + - Custom exporters must now serialize this field directly from LogRecord::event_name instead of iterating over the attributes. + - The OTLP Log Exporter (and any custom exporter using OTLP transformation from opentelemetry-proto) will no longer receive this field as an attribute. + ## v0.4.0 - Removed unwanted dependency on opentelemetry-sdk. diff --git a/opentelemetry-otlp/CHANGELOG.md b/opentelemetry-otlp/CHANGELOG.md index 5295ae9ee0..51084631db 100644 --- a/opentelemetry-otlp/CHANGELOG.md +++ b/opentelemetry-otlp/CHANGELOG.md @@ -20,7 +20,8 @@ now use `.with_resource(RESOURCE::default())` to configure Resource when using previous release. - **Breaking** [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) The OTLP logs exporter now overrides the [InstrumentationScope::name](https://github.com/open-telemetry/opentelemetry-proto/blob/b3060d2104df364136d75a35779e6bd48bac449a/opentelemetry/proto/common/v1/common.proto#L73) field with the `target` from `LogRecord`, if target is populated. - Groups batch of `LogRecord` and `Span` by their resource and instrumentation scope before exporting, for better efficiency [#1873](https://github.com/open-telemetry/opentelemetry-rust/pull/1873). - +- **Breaking** [1928](https://github.com/open-telemetry/opentelemetry-rust/pull/1928) Insert tracing event name into LogRecord::event_name instead of attributes. + - The OTLP Log Exporter (and any custom exporter using OTLP transformation from opentelemetry-proto) will no longer receive this field as an attribute. ## v0.16.0 From 3491e0310936d495a3f36365372375b429b75d2d Mon Sep 17 00:00:00 2001 From: Lalit Date: Fri, 12 Jul 2024 12:32:46 -0700 Subject: [PATCH 06/12] add name into attributes --- opentelemetry-proto/src/transform/logs.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/opentelemetry-proto/src/transform/logs.rs b/opentelemetry-proto/src/transform/logs.rs index 0a672d3d51..6e5235f1d9 100644 --- a/opentelemetry-proto/src/transform/logs.rs +++ b/opentelemetry-proto/src/transform/logs.rs @@ -92,11 +92,22 @@ pub mod tonic { severity_number: severity_number.into(), severity_text: log_record.severity_text.map(Into::into).unwrap_or_default(), body: log_record.body.map(Into::into), - attributes: log_record - .attributes - .map(Attributes::from_iter) - .unwrap_or_default() - .0, + attributes: { + let mut attributes = log_record + .attributes + .map(Attributes::from_iter) + .unwrap_or_default() + .0; + 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())), + }), + }) + } + attributes + }, dropped_attributes_count: 0, flags: trace_context .map(|ctx| { From 3b0eb127caf52a957c153ae9ab672ebe2a0bdb43 Mon Sep 17 00:00:00 2001 From: Lalit Date: Fri, 12 Jul 2024 12:48:13 -0700 Subject: [PATCH 07/12] update changelog --- opentelemetry-appender-tracing/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/opentelemetry-appender-tracing/CHANGELOG.md b/opentelemetry-appender-tracing/CHANGELOG.md index dc7671c0e2..0791298957 100644 --- a/opentelemetry-appender-tracing/CHANGELOG.md +++ b/opentelemetry-appender-tracing/CHANGELOG.md @@ -7,7 +7,6 @@ - **Breaking** [1928](https://github.com/open-telemetry/opentelemetry-rust/pull/1928) Insert tracing event name into LogRecord::event_name instead of attributes. - Custom exporters must now serialize this field directly from LogRecord::event_name instead of iterating over the attributes. - - The OTLP Log Exporter (and any custom exporter using OTLP transformation from opentelemetry-proto) will no longer receive this field as an attribute. ## v0.4.0 From f8ac74cb7a1be5b4e0cf4d09b4c0a3d7ed8e45bc Mon Sep 17 00:00:00 2001 From: Lalit Date: Fri, 12 Jul 2024 12:50:05 -0700 Subject: [PATCH 08/12] format --- opentelemetry-otlp/CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/opentelemetry-otlp/CHANGELOG.md b/opentelemetry-otlp/CHANGELOG.md index d3dbd211d2..f901e1314b 100644 --- a/opentelemetry-otlp/CHANGELOG.md +++ b/opentelemetry-otlp/CHANGELOG.md @@ -21,8 +21,7 @@ now use `.with_resource(RESOURCE::default())` to configure Resource when using - **Breaking** [1869](https://github.com/open-telemetry/opentelemetry-rust/pull/1869) The OTLP logs exporter now overrides the [InstrumentationScope::name](https://github.com/open-telemetry/opentelemetry-proto/blob/b3060d2104df364136d75a35779e6bd48bac449a/opentelemetry/proto/common/v1/common.proto#L73) field with the `target` from `LogRecord`, if target is populated. - Groups batch of `LogRecord` and `Span` by their resource and instrumentation scope before exporting, for better efficiency [#1873](https://github.com/open-telemetry/opentelemetry-rust/pull/1873). - **Breaking** Update to `http` v1 and `tonic` v0.12 [#1674](https://github.com/open-telemetry/opentelemetry-rust/pull/1674) -- **Breaking** [1928](https://github.com/open-telemetry/opentelemetry-rust/pull/1928) Insert tracing event name into LogRecord::event_name instead of attributes. - - The OTLP Log Exporter (and any custom exporter using OTLP transformation from opentelemetry-proto) will no longer receive this field as an attribute. + ## v0.16.0 ### Fixed From 853e16f68f82a833437a8e3c6117d99acafb471b Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 12 Jul 2024 14:00:41 -0700 Subject: [PATCH 09/12] Update opentelemetry-appender-tracing/CHANGELOG.md Co-authored-by: Cijo Thomas --- opentelemetry-appender-tracing/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-appender-tracing/CHANGELOG.md b/opentelemetry-appender-tracing/CHANGELOG.md index 0791298957..59edf5fe80 100644 --- a/opentelemetry-appender-tracing/CHANGELOG.md +++ b/opentelemetry-appender-tracing/CHANGELOG.md @@ -6,7 +6,7 @@ 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. - - Custom exporters must now serialize this field directly from LogRecord::event_name instead of iterating over the 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. ## v0.4.0 From 820911c5c88a061cf42e9408cb93fd4c954c90d6 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 12 Jul 2024 15:45:36 -0700 Subject: [PATCH 10/12] update stdout --- opentelemetry-stdout/src/logs/transform.rs | 32 ++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/opentelemetry-stdout/src/logs/transform.rs b/opentelemetry-stdout/src/logs/transform.rs index b2f5a43a57..323fd9a011 100644 --- a/opentelemetry-stdout/src/logs/transform.rs +++ b/opentelemetry-stdout/src/logs/transform.rs @@ -1,7 +1,7 @@ use std::{borrow::Cow, collections::HashMap, time::SystemTime}; use crate::common::{ - as_human_readable, as_opt_human_readable, as_opt_unix_nano, as_unix_nano, AttributeSet, + as_human_readable, as_opt_human_readable, as_opt_unix_nano, as_unix_nano, AttributeSet, Key, KeyValue, Resource, Scope, Value, }; use serde::Serialize; @@ -131,16 +131,26 @@ impl From for LogRecord { .severity_number .map(|u| u as u32) .unwrap_or_default(), - attributes: value - .record - .attributes - .map(|attrs| { - attrs - .into_iter() - .map(|(key, value)| (key, value).into()) - .collect() - }) - .unwrap_or_default(), + attributes: { + let mut attributes = value + .record + .attributes + .unwrap_or_default() + .into_iter() + .map(|(key, value)| (key, value).into()) + .collect::>(); + + if let Some(event_name) = &value.record.event_name { + attributes.push( + ( + opentelemetry::Key::from("name"), + opentelemetry::Value::String(event_name.to_owned().into()), + ) + .into(), + ) + } + attributes + }, dropped_attributes_count: 0, severity_text: value.record.severity_text, body: value.record.body.map(|a| a.into()), From 2fff92836fcf6afc6aabdd53f5c596fccce59494 Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 12 Jul 2024 15:48:30 -0700 Subject: [PATCH 11/12] leftover --- opentelemetry-stdout/src/logs/transform.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-stdout/src/logs/transform.rs b/opentelemetry-stdout/src/logs/transform.rs index 323fd9a011..a8d089f29f 100644 --- a/opentelemetry-stdout/src/logs/transform.rs +++ b/opentelemetry-stdout/src/logs/transform.rs @@ -144,7 +144,7 @@ impl From for LogRecord { attributes.push( ( opentelemetry::Key::from("name"), - opentelemetry::Value::String(event_name.to_owned().into()), + opentelemetry::Value::String(event_name.clone().into()), ) .into(), ) From 0018b2f260b8249397e6460f099ccf713f7d613a Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Fri, 12 Jul 2024 16:00:56 -0700 Subject: [PATCH 12/12] lint --- opentelemetry-stdout/src/logs/transform.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-stdout/src/logs/transform.rs b/opentelemetry-stdout/src/logs/transform.rs index a8d089f29f..80c4a877ef 100644 --- a/opentelemetry-stdout/src/logs/transform.rs +++ b/opentelemetry-stdout/src/logs/transform.rs @@ -1,7 +1,7 @@ use std::{borrow::Cow, collections::HashMap, time::SystemTime}; use crate::common::{ - as_human_readable, as_opt_human_readable, as_opt_unix_nano, as_unix_nano, AttributeSet, Key, + as_human_readable, as_opt_human_readable, as_opt_unix_nano, as_unix_nano, AttributeSet, KeyValue, Resource, Scope, Value, }; use serde::Serialize;