diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-09-04 15:35:53 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-09-04 15:35:53 +0100 |
commit | 06444bbc95f59b9bd69d99cb9c666e6162b053b7 (patch) | |
tree | de6687b05d4c5013ba68730aba9206c82e7c8085 /src/bin/subplot.rs | |
parent | 385211d9104dd7bbd7431f33df90372ac6f3cd20 (diff) | |
download | subplot-06444bbc95f59b9bd69d99cb9c666e6162b053b7.tar.gz |
tracing: Make formatting better and document
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'src/bin/subplot.rs')
-rw-r--r-- | src/bin/subplot.rs | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/src/bin/subplot.rs b/src/bin/subplot.rs index 29ed25e..f4eb678 100644 --- a/src/bin/subplot.rs +++ b/src/bin/subplot.rs @@ -8,7 +8,7 @@ use structopt::StructOpt; use subplot::{ generate_test_program, resource, template_spec, DataFile, Document, MarkupOpts, Style, }; -use tracing::{event, span, Level}; +use tracing::{event, span, Level, Subscriber}; use std::convert::TryFrom; use std::ffi::OsString; @@ -439,6 +439,12 @@ fn real_main() { } } +enum LogFormat { + Pretty, + OneLine, + Json, +} + fn main() { let filter = match tracing_subscriber::EnvFilter::try_from_env("SUBPLOT_LOG") { Ok(f) => f, @@ -452,13 +458,27 @@ fn main() { } } }; - match std::env::var("SUBPLOT_TRACE_LOG").ok().as_deref() { + let format = match std::env::var("SUBPLOT_LOG_FORMAT") + .map(|v| v.to_ascii_lowercase()) + .as_deref() + { + Err(_) | Ok("oneline") | Ok("default") => LogFormat::OneLine, + Ok("pretty") => LogFormat::Pretty, + Ok("json") => LogFormat::Json, + Ok(v) => { + eprintln!("Unknown log format: {:?}", v); + process::exit(1); + } + }; + let subscriber = match std::env::var("SUBPLOT_LOG_FILE").ok().as_deref() { None | Some("") | Some("-") => { - let subscriber = tracing_subscriber::fmt() - .with_env_filter(filter) - .pretty() - .finish(); - tracing::subscriber::with_default(subscriber, real_main); + let subscriber = tracing_subscriber::fmt().with_env_filter(filter); + let subscriber: Box<dyn Subscriber + Send + Sync + 'static> = match format { + LogFormat::OneLine => Box::new(subscriber.finish()), + LogFormat::Pretty => Box::new(subscriber.pretty().finish()), + LogFormat::Json => Box::new(subscriber.json().with_ansi(false).finish()), + }; + subscriber } Some(fname) => { let curdir = std::path::Component::CurDir; @@ -472,10 +492,14 @@ fn main() { let subscriber = tracing_subscriber::fmt() .with_writer(non_blocking) .with_env_filter(filter) - .pretty() - .with_ansi(false) - .finish(); - tracing::subscriber::with_default(subscriber, real_main); + .with_ansi(false); + let subscriber: Box<dyn Subscriber + Send + Sync + 'static> = match format { + LogFormat::OneLine => Box::new(subscriber.finish()), + LogFormat::Pretty => Box::new(subscriber.pretty().finish()), + LogFormat::Json => Box::new(subscriber.json().finish()), + }; + subscriber } - } + }; + tracing::subscriber::with_default(subscriber, real_main); } |