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.
This commit is contained in:
parent
de072fd0c4
commit
fa8764984f
2 changed files with 18 additions and 33 deletions
|
@ -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<String>,
|
||||
}
|
||||
|
@ -39,42 +35,31 @@ impl std::io::Write for ChannelWriter {
|
|||
}
|
||||
|
||||
pub fn create_tracing_subscriber(tx: UnboundedSender<String>) {
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue