From 9cdbef2278e3e83abd15c7699522b3b6fd01777d Mon Sep 17 00:00:00 2001 From: fiag Date: Mon, 23 Aug 2021 14:32:26 +0800 Subject: [PATCH] Add feature for readable timestamp string --- Cargo.toml | 4 ++++ src/ndjson.rs | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9cbc18f..3d8698d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,12 +10,16 @@ keywords = ["pretty-printer", "ndjson", "femme", "log", "logger"] readme = "README.md" edition = "2018" +[features] +readable_timestamp = ["chrono"] + [dependencies] log = { version = "0.4.7", features = ["kv_unstable", "std"] } serde = "1.0.97" serde_derive = "1.0.97" serde_json = "1.0.56" cfg-if = "0.1.9" +chrono = { version = "0.4.19", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] web-sys = { version = "0.3.25", features = ["console"] } diff --git a/src/ndjson.rs b/src/ndjson.rs index 7066a77..0cdb8dd 100644 --- a/src/ndjson.rs +++ b/src/ndjson.rs @@ -1,5 +1,7 @@ //! Print logs as ndjson. +#[cfg(readable_timestamp)] +use chrono::prelude::*; use log::{kv, LevelFilter, Log, Metadata, Record}; use std::io::{self, StdoutLock, Write}; use std::time; @@ -24,8 +26,26 @@ impl Log for Logger { let stdout = io::stdout(); let mut handle = stdout.lock(); let level = get_level(record.level()); - let time = time::UNIX_EPOCH.elapsed().unwrap().as_millis(); - write!(&mut handle, "{{\"level\":{},\"time\":{},\"msg\":", level, time).unwrap(); + #[cfg(not(readable_timestamp))] + { + let time = time::UNIX_EPOCH.elapsed().unwrap().as_millis(); + write!( + &mut handle, + "{{\"level\":{},\"time\":{},\"msg\":", + level, time + ) + .unwrap(); + } + #[cfg(readable_timestamp)] + { + let time = Local::now().format("%Y-%m-%d %H:%M:%S%.f%z"); + write!( + &mut handle, + "{{\"level\":{},\"time\":\"{}\",\"msg\":", + level, time + ) + .unwrap(); + } serde_json::to_writer(&mut handle, record.args()).unwrap(); format_kv_pairs(&mut handle, &record); writeln!(&mut handle, "}}").unwrap();