Appender-Tracing - extend spl treatment of message when recording str (#2689)

Co-authored-by: Lalit Kumar Bhasin <lalit_fin@yahoo.com>
This commit is contained in:
Cijo Thomas 2025-02-20 16:10:15 -08:00 committed by GitHub
parent 6648d74cb2
commit 19dba6964e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 7 deletions

View File

@ -5,6 +5,32 @@
Fixes [1682](https://github.com/open-telemetry/opentelemetry-rust/issues/1682).
"spec_unstable_logs_enabled" feature now do not suppress logs for other layers.
The special treatment of the "message" field has been extended when recording
string values. With this change, when a log is emitted with a field named
"message" (and string value), its value is directly assigned to the LogRecords
body rather than being stored as an attribute named "message". This offers a
slight performance improvement over previous.
For example, the below will now produce LogRecord with the message value
populated as LogRecord's body:
```rust
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "otel@opentelemetry.io", message = "This is an example message");
```
Previously, Body was only populated when the below style was used.
```rust
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "otel@opentelemetry.io", "This is an example message");
```
This style, while slightly slower, should still be used when the value is not a
simple string, but require format arguments as in the below example.
```rust
error!(name: "my-event-name", target: "my-system", event_id = 20, user_name = "otel", user_email = "otel@opentelemetry.io", "This is an example message with format arguments {} and {}", "foo", "bar");
```
## 0.28.1
Released 2025-Feb-12

View File

@ -88,15 +88,14 @@ impl<LR: LogRecord> tracing::field::Visit for EventVisitor<'_, LR> {
if is_duplicated_metadata(field.name()) {
return;
}
//TODO: Consider special casing "message" to populate body and document
// to users to use message field for log message, to avoid going to the
// record_debug, which has dyn dispatch, string allocation and
// formatting cost.
//TODO: Fix heap allocation. Check if lifetime of &str can be used
// to optimize sync exporter scenario.
self.log_record
.add_attribute(Key::new(field.name()), AnyValue::from(value.to_owned()));
if field.name() == "message" {
self.log_record.set_body(AnyValue::from(value.to_owned()));
} else {
self.log_record
.add_attribute(Key::new(field.name()), AnyValue::from(value.to_owned()));
}
}
fn record_bool(&mut self, field: &tracing_core::Field, value: bool) {