From c4e99ef5397175005e26910d8b426704021b643b Mon Sep 17 00:00:00 2001 From: asonix Date: Mon, 15 Apr 2024 15:16:10 -0500 Subject: [PATCH] Add ability to disable colorized logs --- defaults.toml | 1 + pict-rs.toml | 5 +++++ src/config/commandline.rs | 8 ++++++++ src/config/defaults.rs | 2 ++ src/config/file.rs | 2 ++ src/init_tracing.rs | 15 +++++++++++++-- 6 files changed, 31 insertions(+), 2 deletions(-) diff --git a/defaults.toml b/defaults.toml index 60abfa3..8714689 100644 --- a/defaults.toml +++ b/defaults.toml @@ -16,6 +16,7 @@ concurrency = 32 format = "normal" targets = "info" log_spans = false +no_ansi = false [tracing.console] buffer_capacity = 102400 diff --git a/pict-rs.toml b/pict-rs.toml index 586c022..c21ed12 100644 --- a/pict-rs.toml +++ b/pict-rs.toml @@ -98,6 +98,11 @@ targets = 'info' # default: false log_spans = false +## Optional: whether to disable colorized log output +# environment variable: PICTRS__TRACING__LOGGING__NO_ANSI +# default: false +no_ansi = false + ## Console configuration [tracing.console] diff --git a/src/config/commandline.rs b/src/config/commandline.rs index d029709..8d8f565 100644 --- a/src/config/commandline.rs +++ b/src/config/commandline.rs @@ -18,6 +18,7 @@ impl Args { log_format, log_targets, log_spans, + no_log_ansi, console_address, console_buffer_capacity, opentelemetry_url, @@ -38,6 +39,7 @@ impl Args { format: log_format, targets: log_targets.map(Serde::new), log_spans, + no_ansi: no_log_ansi, }, console: Console { address: console_address, @@ -581,6 +583,8 @@ struct Logging { targets: Option>, #[serde(skip_serializing_if = "std::ops::Not::not")] log_spans: bool, + #[serde(skip_serializing_if = "std::ops::Not::not")] + no_ansi: bool, } #[derive(Debug, Default, serde::Serialize)] @@ -925,6 +929,10 @@ pub(super) struct Args { #[arg(long)] log_spans: bool, + #[arg(long)] + /// Whether to disable color-codes in log output + no_log_ansi: bool, + /// Address and port to expose tokio-console metrics #[arg(long)] console_address: Option, diff --git a/src/config/defaults.rs b/src/config/defaults.rs index c23a77d..2029512 100644 --- a/src/config/defaults.rs +++ b/src/config/defaults.rs @@ -55,6 +55,7 @@ struct LoggingDefaults { format: LogFormat, targets: Serde, log_spans: bool, + no_ansi: bool, } #[derive(Clone, Debug, serde::Serialize)] @@ -235,6 +236,7 @@ impl Default for LoggingDefaults { format: LogFormat::Normal, targets: "info".parse().expect("Valid targets string"), log_spans: false, + no_ansi: false, } } } diff --git a/src/config/file.rs b/src/config/file.rs index 508878a..1b809e0 100644 --- a/src/config/file.rs +++ b/src/config/file.rs @@ -163,6 +163,8 @@ pub(crate) struct Logging { pub(crate) targets: Serde, pub(crate) log_spans: bool, + + pub(crate) no_ansi: bool, } #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] diff --git a/src/init_tracing.rs b/src/init_tracing.rs index 24900f3..bf05745 100644 --- a/src/init_tracing.rs +++ b/src/init_tracing.rs @@ -1,4 +1,5 @@ use crate::config::{LogFormat, OpenTelemetry, Tracing}; +use color_eyre::config::Theme; use console_subscriber::ConsoleLayer; use opentelemetry::KeyValue; use opentelemetry_otlp::WithExportConfig; @@ -11,7 +12,15 @@ use tracing_subscriber::{ }; pub(super) fn init_tracing(tracing: &Tracing) -> color_eyre::Result<()> { - color_eyre::install()?; + let eyre_theme = if tracing.logging.no_ansi { + Theme::new() + } else { + Theme::dark() + }; + + color_eyre::config::HookBuilder::new() + .theme(eyre_theme) + .install()?; LogTracer::init()?; @@ -23,7 +32,9 @@ pub(super) fn init_tracing(tracing: &Tracing) -> color_eyre::Result<()> { FmtSpan::NONE }; - let format_layer = tracing_subscriber::fmt::layer().with_span_events(fmt_span); + let format_layer = tracing_subscriber::fmt::layer() + .with_span_events(fmt_span) + .with_ansi(!tracing.logging.no_ansi); match tracing.logging.format { LogFormat::Compact => with_format(format_layer.compact(), tracing),