From 5576e0869d0bf53b96a1b67d941f1e9b93e135c6 Mon Sep 17 00:00:00 2001 From: Shayne Fletcher Date: Mon, 21 Aug 2023 14:53:45 -0400 Subject: [PATCH] [tracing-subscriber]: add chrono feature --- tracing-subscriber/Cargo.toml | 3 ++ .../src/fmt/time/chrono_crate.rs | 45 +++++++++++-------- tracing-subscriber/src/fmt/time/mod.rs | 3 +- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/tracing-subscriber/Cargo.toml b/tracing-subscriber/Cargo.toml index ea205be5f9..29ef246b29 100644 --- a/tracing-subscriber/Cargo.toml +++ b/tracing-subscriber/Cargo.toml @@ -32,6 +32,9 @@ fmt = ["registry", "std"] ansi = ["fmt", "nu-ansi-term"] registry = ["sharded-slab", "thread_local", "std"] json = ["tracing-serde", "serde", "serde_json"] +# Enables support for `chrono` based time formatters. +chrono-time = [] + # Enables support for local time when using the `time` crate timestamp # formatters. local-time = ["time/local-offset"] diff --git a/tracing-subscriber/src/fmt/time/chrono_crate.rs b/tracing-subscriber/src/fmt/time/chrono_crate.rs index 0a3d5cfb64..843f971b6f 100644 --- a/tracing-subscriber/src/fmt/time/chrono_crate.rs +++ b/tracing-subscriber/src/fmt/time/chrono_crate.rs @@ -1,31 +1,34 @@ use crate::fmt::format::Writer; use crate::fmt::time::FormatTime; -/// Formats [local time]s and [UTC time]s with [formatter] implementations +/// Formats [local time]s and [UTC time]s with `FormatTime` implementations /// that use the [`chrono` crate]. /// -/// [local time]: https://docs.rs/chrono/0.4.26/chrono/offset/struct.Local.html -/// [UTC time]: https://docs.rs/chrono/0.4.26/chrono/offset/struct.Utc.html -/// [`chrono` crate]: https://docs.rs/chrono/0.4.26/chrono/ -/// [formatter]: https://docs.rs/time/0.3/time/formatting/trait.Formattable.html +/// [local time]: [`chrono::offset::Local`] +/// [UTC time]: [`chrono::offset::Utc`] +/// [`chrono` crate]: [`chrono`] -/// Tag-type (indicating UTC timezone) enabling static dispatch -/// to `chrono::Local` functions. -#[derive(Debug)] -pub struct LocalTime; +/// Retrieve and print the current local time. +#[cfg(feature = "chrono-time")] +#[cfg_attr(docsrs, doc(cfg(feature = "chrono-time")))] +#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +pub struct ChronoLocal; -impl FormatTime for LocalTime { +#[cfg(feature = "chrono-time")] +impl FormatTime for ChronoLocal { fn format_time(&self, w: &mut Writer<'_>) -> alloc::fmt::Result { w.write_str(&chrono::Local::now().to_rfc3339()) } } -/// Tag-type (indicating the "local" timezone) enabling static -/// dispatch to `chrono::Utc` functions. -#[derive(Debug)] -pub struct Utc; +/// Retrieve and print the current UTC time. +#[cfg(feature = "chrono-time")] +#[cfg_attr(docsrs, doc(cfg(feature = "chrono")))] +#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +pub struct ChronoUtc; -impl FormatTime for Utc { +#[cfg(feature = "chrono-time")] +impl FormatTime for ChronoUtc { fn format_time(&self, w: &mut Writer<'_>) -> alloc::fmt::Result { w.write_str(&chrono::Utc::now().to_rfc3339()) } @@ -36,22 +39,26 @@ mod tests { use crate::fmt::format::Writer; use crate::fmt::time::FormatTime; - use super::LocalTime; - use super::Utc; + #[cfg(feature = "chrono-time")] + use super::ChronoLocal; + #[cfg(feature = "chrono-time")] + use super::ChronoUtc; + #[cfg(feature = "chrono-time")] #[test] fn test_chrono_format_time_utc() { let mut buf = String::new(); let mut dst: Writer<'_> = Writer::new(&mut buf); - assert!(FormatTime::format_time(&Utc, &mut dst).is_ok()); + assert!(FormatTime::format_time(&ChronoUtc, &mut dst).is_ok()); // e.g. `buf` contains "2023-08-18T19:05:08.662499+00:00" } + #[cfg(feature = "chrono-time")] #[test] fn test_chrono_format_time_local() { let mut buf = String::new(); let mut dst: Writer<'_> = Writer::new(&mut buf); - assert!(FormatTime::format_time(&LocalTime, &mut dst).is_ok()); + assert!(FormatTime::format_time(&ChronoLocal, &mut dst).is_ok()); // e.g. `buf` contains "2023-08-18T14:59:08.662499-04:00". } } diff --git a/tracing-subscriber/src/fmt/time/mod.rs b/tracing-subscriber/src/fmt/time/mod.rs index be450a9a98..30e9057c83 100644 --- a/tracing-subscriber/src/fmt/time/mod.rs +++ b/tracing-subscriber/src/fmt/time/mod.rs @@ -15,7 +15,8 @@ pub use time_crate::UtcTime; #[cfg_attr(docsrs, doc(cfg(all(unsound_local_offset, feature = "local-time"))))] pub use time_crate::LocalTime; -/// [`Chrono`]-based implementation for time. +/// [`chrono`]-based implementation for time. +#[cfg(feature = "chrono-time")] pub mod chrono_crate; /// A type that can measure and format the current time.