From b1f54d8a038f1088ed07b8218e3465beda04cc4a Mon Sep 17 00:00:00 2001 From: Ruihang Xia Date: Tue, 20 Feb 2024 14:42:56 +0800 Subject: [PATCH] fix: disable ansi contorl char when stdout is redirected (#3332) * fix: disable ansi contorl char when stdout is redirected Signed-off-by: Ruihang Xia * don't touch file logging layer Signed-off-by: Ruihang Xia * update comment Signed-off-by: Ruihang Xia * disable ansi for two file layers Signed-off-by: Ruihang Xia Co-authored-by: LFC --------- Signed-off-by: Ruihang Xia Co-authored-by: LFC --- Cargo.lock | 1 + src/common/telemetry/Cargo.toml | 1 + src/common/telemetry/src/logging.rs | 17 ++++++++++++----- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f49970b58f..b9e1c20227 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2054,6 +2054,7 @@ dependencies = [ name = "common-telemetry" version = "0.6.0" dependencies = [ + "atty", "backtrace", "common-error", "console-subscriber", diff --git a/src/common/telemetry/Cargo.toml b/src/common/telemetry/Cargo.toml index c6b76a61e5..d25e89e657 100644 --- a/src/common/telemetry/Cargo.toml +++ b/src/common/telemetry/Cargo.toml @@ -9,6 +9,7 @@ tokio-console = ["console-subscriber", "tokio/tracing"] deadlock_detection = ["parking_lot/deadlock_detection"] [dependencies] +atty = "0.2" backtrace = "0.3" common-error.workspace = true console-subscriber = { version = "0.1", optional = true } diff --git a/src/common/telemetry/src/logging.rs b/src/common/telemetry/src/logging.rs index 0b7c3ba1b8..f3f38489e8 100644 --- a/src/common/telemetry/src/logging.rs +++ b/src/common/telemetry/src/logging.rs @@ -132,27 +132,34 @@ pub fn init_global_logging( // Enable log compatible layer to convert log record to tracing span. LogTracer::init().expect("log tracer must be valid"); + // stdout log layer. let stdout_logging_layer = if opts.append_stdout { let (stdout_writer, stdout_guard) = tracing_appender::non_blocking(std::io::stdout()); guards.push(stdout_guard); - Some(Layer::new().with_writer(stdout_writer)) + Some( + Layer::new() + .with_writer(stdout_writer) + .with_ansi(atty::is(atty::Stream::Stdout)), + ) } else { None }; - // JSON log layer. + // file log layer. let rolling_appender = RollingFileAppender::new(Rotation::HOURLY, dir, app_name); let (rolling_writer, rolling_writer_guard) = tracing_appender::non_blocking(rolling_appender); - let file_logging_layer = Layer::new().with_writer(rolling_writer); + let file_logging_layer = Layer::new().with_writer(rolling_writer).with_ansi(false); guards.push(rolling_writer_guard); - // error JSON log layer. + // error file log layer. let err_rolling_appender = RollingFileAppender::new(Rotation::HOURLY, dir, format!("{}-{}", app_name, "err")); let (err_rolling_writer, err_rolling_writer_guard) = tracing_appender::non_blocking(err_rolling_appender); - let err_file_logging_layer = Layer::new().with_writer(err_rolling_writer); + let err_file_logging_layer = Layer::new() + .with_writer(err_rolling_writer) + .with_ansi(false); guards.push(err_rolling_writer_guard); // resolve log level settings from: