From fa8764984f869a755e3046dddcb51751a8260321 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Wed, 1 Mar 2023 20:12:18 +0100 Subject: [PATCH] feat(dtmm): Rework log levels and filters Keep the flexibility for dev, but in prod drop stdout and restrict the log view to stuff useful to the user. --- crates/dtmm/src/util/log.rs | 43 ++++++++++++------------------------- lib/dtmt-shared/src/log.rs | 8 +++---- 2 files changed, 18 insertions(+), 33 deletions(-) diff --git a/crates/dtmm/src/util/log.rs b/crates/dtmm/src/util/log.rs index 12aeeff..e6a019e 100644 --- a/crates/dtmm/src/util/log.rs +++ b/crates/dtmm/src/util/log.rs @@ -7,10 +7,6 @@ use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::prelude::*; use tracing_subscriber::EnvFilter; -// I currently cannot find a way to add a parameter to `dtmt_shared::create_tracing_subscriber` -// that would allow me to pass an extra `Layer` to that function. So, for now, -// its code has to be duplicated here. - pub struct ChannelWriter { tx: UnboundedSender, } @@ -39,42 +35,31 @@ impl std::io::Write for ChannelWriter { } pub fn create_tracing_subscriber(tx: UnboundedSender) { - let env_layer = - EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::try_new("info").unwrap()); - - let (dev_stdout_layer, prod_stdout_layer, filter_layer) = if cfg!(debug_assertions) { - let fmt_layer = fmt::layer().pretty(); - (Some(fmt_layer), None, None) + let env_layer = if cfg!(debug_assertions) { + EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")) } else { - // Creates a layer that - // - only prints events that contain a message - // - does not print fields - // - does not print spans/targets - // - only prints time, not date - let fmt_layer = fmt::layer() - .event_format(dtmt_shared::Formatter) - .fmt_fields(debug_fn(dtmt_shared::format_field)); + EnvFilter::new("error,dtmm=info") + }; - ( - None, - Some(fmt_layer), - Some(FilterFn::new(dtmt_shared::filter)), - ) + let stdout_layer = if cfg!(debug_assertions) { + let layer = fmt::layer().pretty(); + Some(layer) + } else { + None }; let channel_layer = fmt::layer() // TODO: Re-enable and implement a formatter for the Druid widget .with_ansi(false) .event_format(dtmt_shared::Formatter) - .fmt_fields(debug_fn(dtmt_shared::format_field)) - .with_writer(move || ChannelWriter::new(tx.clone())); + .fmt_fields(debug_fn(dtmt_shared::format_fields)) + .with_writer(move || ChannelWriter::new(tx.clone())) + .with_filter(FilterFn::new(dtmt_shared::filter_fields)); tracing_subscriber::registry() - .with(channel_layer) - .with(filter_layer) .with(env_layer) - .with(dev_stdout_layer) - .with(prod_stdout_layer) + .with(channel_layer) + .with(stdout_layer) .with(ErrorLayer::new(fmt::format::Pretty::default())) .init(); } diff --git a/lib/dtmt-shared/src/log.rs b/lib/dtmt-shared/src/log.rs index 15a26b1..3c46a4b 100644 --- a/lib/dtmt-shared/src/log.rs +++ b/lib/dtmt-shared/src/log.rs @@ -16,7 +16,7 @@ use tracing_subscriber::EnvFilter; pub const TIME_FORMAT: &[FormatItem] = format_description!("[hour]:[minute]:[second]"); -pub fn format_field(w: &mut Writer<'_>, field: &Field, val: &dyn std::fmt::Debug) -> Result { +pub fn format_fields(w: &mut Writer<'_>, field: &Field, val: &dyn std::fmt::Debug) -> Result { if field.name() == "message" { write!(w, "{:?}", val) } else { @@ -24,7 +24,7 @@ pub fn format_field(w: &mut Writer<'_>, field: &Field, val: &dyn std::fmt::Debug } } -pub fn filter(metadata: &Metadata<'_>) -> bool { +pub fn filter_fields(metadata: &Metadata<'_>) -> bool { metadata .fields() .iter() @@ -72,9 +72,9 @@ pub fn create_tracing_subscriber() { // - only prints time, not date let fmt_layer = fmt::layer() .event_format(Formatter) - .fmt_fields(debug_fn(format_field)); + .fmt_fields(debug_fn(format_fields)); - (None, Some(fmt_layer), Some(FilterFn::new(filter))) + (None, Some(fmt_layer), Some(FilterFn::new(filter_fields))) }; tracing_subscriber::registry()