From c7a243a3a1cdeaa47abf41c1ee43704a1ce1d30e Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Wed, 26 Jan 2022 17:21:54 +0100 Subject: [PATCH] Minor logging improvements - only have colors if the output terminal is a tty - log in a non-blocking fashion --- Cargo.lock | 13 +++++++++++++ crates/cli/Cargo.toml | 2 ++ crates/cli/src/main.rs | 5 ++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 54e9394a..bc1805ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1847,6 +1847,7 @@ version = "0.1.0" dependencies = [ "anyhow", "argon2", + "atty", "clap", "dotenv", "futures 0.3.19", @@ -1872,6 +1873,7 @@ dependencies = [ "tower", "tower-http", "tracing", + "tracing-appender", "tracing-opentelemetry", "tracing-subscriber", "url", @@ -4118,6 +4120,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94571df2eae3ed4353815ea5a90974a594a1792d8782ff2cbcc9392d1101f366" +dependencies = [ + "crossbeam-channel 0.5.2", + "time 0.3.6", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.18" diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 88dfbfd5..981b7f0f 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -21,8 +21,10 @@ url = "2.2.2" argon2 = { version = "0.3.2", features = ["password-hash"] } reqwest = { version = "0.11.9", features = ["rustls-tls"], default-features = false, optional = true } watchman_client = "0.7.1" +atty = "0.2.14" tracing = "0.1.29" +tracing-appender = "0.2.0" tracing-subscriber = { version = "0.3.6", features = ["env-filter"] } tracing-opentelemetry = "0.16.0" opentelemetry = { version = "0.16.0", features = ["trace", "metrics", "rt-tokio"] } diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs index a2a97bca..3b9bd992 100644 --- a/crates/cli/src/main.rs +++ b/crates/cli/src/main.rs @@ -112,7 +112,10 @@ async fn try_main() -> anyhow::Result<()> { // Setup logging // This writes logs to stderr - let fmt_layer = tracing_subscriber::fmt::layer().with_writer(std::io::stderr); + let (log_writer, _guard) = tracing_appender::non_blocking(std::io::stderr()); + let fmt_layer = tracing_subscriber::fmt::layer() + .with_writer(log_writer) + .with_ansi(atty::is(atty::Stream::Stderr)); let filter_layer = EnvFilter::try_from_default_env() .or_else(|_| EnvFilter::try_new("info")) .context("could not setup logging filter")?;