From a6e622b09337978684d377f31da1a3e2ad6b7d85 Mon Sep 17 00:00:00 2001 From: Roberto Huertas Date: Sun, 24 Dec 2023 00:58:54 +0100 Subject: [PATCH] feat(json): parse str in case it's json value --- dd-tracing-layer/Cargo.toml | 4 ++-- dd-tracing-layer/tests/datadog.rs | 8 ++++++-- log-tracing-layer/Cargo.toml | 2 +- log-tracing-layer/src/visitor.rs | 6 +++++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dd-tracing-layer/Cargo.toml b/dd-tracing-layer/Cargo.toml index 1b2bb10..015502f 100644 --- a/dd-tracing-layer/Cargo.toml +++ b/dd-tracing-layer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dd-tracing-layer" -version = "0.2.0" +version = "0.3.0" authors = ["Roberto Huertas "] description = "Send your logs to Datadog" edition = "2021" @@ -15,7 +15,7 @@ maintenance = { status = "actively-developed" } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -log-tracing-layer = { path = "../log-tracing-layer", version = "0.2.0" } +log-tracing-layer = { path = "../log-tracing-layer", version = "0.3.0" } tracing-subscriber = "0.3" tracing = "0.1" reqwest = { version = "0.11", features = ["gzip"] } diff --git a/dd-tracing-layer/tests/datadog.rs b/dd-tracing-layer/tests/datadog.rs index 7ffb7fa..c334f72 100644 --- a/dd-tracing-layer/tests/datadog.rs +++ b/dd-tracing-layer/tests/datadog.rs @@ -28,12 +28,16 @@ mod tests { .with_tags("env:dev"); let dd = dd_tracing_layer::create(options); let subscriber = tracing_subscriber::registry() - // .with(tracing_subscriber::fmt::Layer::new().json()) + .with(tracing_subscriber::fmt::Layer::new().json()) .with(dd); let _s = subscriber::set_default(subscriber); log("a"); std::thread::sleep(std::time::Duration::from_secs(2)); - log("2a"); + tracing::info!( + ip = "127.0.0.1", + person = r#"{ "name": "rob", "age": 15 }"#, + message = "Testing Json" + ); std::thread::sleep(std::time::Duration::from_secs(2)); log("3a"); std::thread::sleep(std::time::Duration::from_secs(6)); diff --git a/log-tracing-layer/Cargo.toml b/log-tracing-layer/Cargo.toml index 2279a9a..51d0e0e 100644 --- a/log-tracing-layer/Cargo.toml +++ b/log-tracing-layer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "log-tracing-layer" -version = "0.2.0" +version = "0.3.0" authors = ["Roberto Huertas "] description = "Build your own custom tracing layer." edition = "2021" diff --git a/log-tracing-layer/src/visitor.rs b/log-tracing-layer/src/visitor.rs index 945090e..ec4ab98 100644 --- a/log-tracing-layer/src/visitor.rs +++ b/log-tracing-layer/src/visitor.rs @@ -1,3 +1,5 @@ +use std::str::FromStr; + use serde_json::json; use tracing::field::Visit; @@ -14,7 +16,9 @@ impl JsonVisitor { } impl Visit for JsonVisitor { fn record_str(&mut self, field: &tracing::field::Field, value: &str) { - self.filter_insert(field, json!(value)); + // try to parse the string in case it's already a json value + let json_value = serde_json::Value::from_str(value).unwrap_or_else(|_| json!(value)); + self.filter_insert(field, json_value); } fn record_bool(&mut self, field: &tracing::field::Field, value: bool) { self.filter_insert(field, json!(value));