diff --git a/src/format/json.rs b/src/format/json.rs index 1976ddf..7e9ebbc 100644 --- a/src/format/json.rs +++ b/src/format/json.rs @@ -174,6 +174,11 @@ impl<'b, 'v> VisitValue<'v> for KeyValueVisitor<'b> { Ok(()) } + fn visit_null(&mut self) -> Result<(), kv::Error> { + self.0.extend_from_slice(b"null"); + Ok(()) + } + fn visit_u64(&mut self, value: u64) -> Result<(), kv::Error> { let mut itoa = itoa::Buffer::new(); self.0.extend_from_slice(itoa.format(value).as_bytes()); diff --git a/src/format/logfmt.rs b/src/format/logfmt.rs index b3fb716..c668dc6 100644 --- a/src/format/logfmt.rs +++ b/src/format/logfmt.rs @@ -161,6 +161,11 @@ impl<'b, 'v> VisitValue<'v> for KeyValueVisitor<'b> { Ok(()) } + fn visit_null(&mut self) -> Result<(), kv::Error> { + self.0.extend_from_slice(b"null"); + Ok(()) + } + fn visit_u64(&mut self, value: u64) -> Result<(), kv::Error> { let mut itoa = itoa::Buffer::new(); self.0.extend_from_slice(itoa.format(value).as_bytes()); diff --git a/src/tests.rs b/src/tests.rs index 2ef4967..68d6a79 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -199,7 +199,7 @@ fn format_logfmt() { format_test::(&[ "lvl=\"INFO\" msg=\"some\\r\\n\\t\\nmessage\" target=\"some_target1\" module=\"module_path1\" key1=\"value1\" file=\"file1:123\"\n", "lvl=\"INFO\" msg=\"some\\r\\n\\t\\nmessage\" target=\"some_target1\" module=\"module_path1\" key1=\"value1\"\n", - "lvl=\"WARN\" msg=\"arguments2 with \\\"quotes\\\"\" target=\"second_target\" module=\"module_path1\" key2a=\"value2\" key2b=123 key3c=-123 key3d=123.0 key2e=true key2f=false key2g=\"c\" key2\\\"g=\"MyDisplay\" file=\"file2:111\"\n", + "lvl=\"WARN\" msg=\"arguments2 with \\\"quotes\\\"\" target=\"second_target\" module=\"module_path1\" key2a=\"value2\" key2b=123 key3c=-123 key3d=123.0 key2e=true key2f=false key2g=\"c\" key2\\\"g=\"MyDisplay\" null_key=null file=\"file2:111\"\n", "lvl=\"ERROR\" msg=\"panicking!\" target=\"panic\" module=\"\" file=\"??:0\"\n", ], add_timestamp); } @@ -209,7 +209,7 @@ fn format_json() { format_test::(&[ "{\"level\":\"INFO\",\"message\":\"some\\r\\n\\t\\nmessage\",\"target\":\"some_target1\",\"module\":\"module_path1\",\"key1\":\"value1\",\"file\":\"file1\",\"line\":\"123\"}\n", "{\"level\":\"INFO\",\"message\":\"some\\r\\n\\t\\nmessage\",\"target\":\"some_target1\",\"module\":\"module_path1\",\"key1\":\"value1\"}\n", - "{\"level\":\"WARN\",\"message\":\"arguments2 with \\\"quotes\\\"\",\"target\":\"second_target\",\"module\":\"module_path1\",\"key2a\":\"value2\",\"key2b\":123,\"key3c\":-123,\"key3d\":123.0,\"key2e\":true,\"key2f\":false,\"key2g\":\"c\",\"key2\\\"g\":\"MyDisplay\",\"file\":\"file2\",\"line\":\"111\"}\n", + "{\"level\":\"WARN\",\"message\":\"arguments2 with \\\"quotes\\\"\",\"target\":\"second_target\",\"module\":\"module_path1\",\"key2a\":\"value2\",\"key2b\":123,\"key3c\":-123,\"key3d\":123.0,\"key2e\":true,\"key2f\":false,\"key2g\":\"c\",\"key2\\\"g\":\"MyDisplay\",\"null_key\":null,\"file\":\"file2\",\"line\":\"111\"}\n", "{\"level\":\"ERROR\",\"message\":\"panicking!\",\"target\":\"panic\",\"module\":\"\",\"file\":\"??\",\"line\":\"0\"}\n", ], add_timestamp_json); } @@ -219,7 +219,7 @@ fn format_gcloud() { format_test::(&[ "{\"severity\":\"INFO\",\"message\":\"some\\r\\n\\t\\nmessage\",\"target\":\"some_target1\",\"module\":\"module_path1\",\"key1\":\"value1\",\"sourceLocation\":{\"file\":\"file1\",\"line\":\"123\"}}\n", "{\"severity\":\"INFO\",\"message\":\"some\\r\\n\\t\\nmessage\",\"target\":\"some_target1\",\"module\":\"module_path1\",\"key1\":\"value1\"}\n", - "{\"severity\":\"WARNING\",\"message\":\"arguments2 with \\\"quotes\\\"\",\"target\":\"second_target\",\"module\":\"module_path1\",\"key2a\":\"value2\",\"key2b\":123,\"key3c\":-123,\"key3d\":123.0,\"key2e\":true,\"key2f\":false,\"key2g\":\"c\",\"key2\\\"g\":\"MyDisplay\",\"sourceLocation\":{\"file\":\"file2\",\"line\":\"111\"}}\n", + "{\"severity\":\"WARNING\",\"message\":\"arguments2 with \\\"quotes\\\"\",\"target\":\"second_target\",\"module\":\"module_path1\",\"key2a\":\"value2\",\"key2b\":123,\"key3c\":-123,\"key3d\":123.0,\"key2e\":true,\"key2f\":false,\"key2g\":\"c\",\"key2\\\"g\":\"MyDisplay\",\"null_key\":null,\"sourceLocation\":{\"file\":\"file2\",\"line\":\"111\"}}\n", "{\"severity\":\"CRITICAL\",\"message\":\"panicking!\",\"target\":\"panic\",\"module\":\"\",\"sourceLocation\":{\"file\":\"??\",\"line\":\"0\"}}\n", ], add_timestamp_json); } @@ -258,6 +258,7 @@ where "key2\"g", &(&log::kv::Value::from_display(&MyDisplay) as &dyn kv::ToValue), ), + ("null_key", &None::<&str>), ]; let kvs: &dyn kv::Source = &kvs; let record2 = Record::builder()