fix: disable ansi contorl char when stdout is redirected (#3332)

* fix: disable ansi contorl char when stdout is redirected

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* don't touch file logging layer

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* update comment

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

* disable ansi for two file layers

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>

Co-authored-by: LFC <bayinamine@gmail.com>

---------

Signed-off-by: Ruihang Xia <waynestxia@gmail.com>
Co-authored-by: LFC <bayinamine@gmail.com>
This commit is contained in:
Ruihang Xia
2024-02-20 14:42:56 +08:00
committed by GitHub
parent bf5e1905cd
commit b1f54d8a03
3 changed files with 14 additions and 5 deletions

1
Cargo.lock generated
View File

@@ -2054,6 +2054,7 @@ dependencies = [
name = "common-telemetry"
version = "0.6.0"
dependencies = [
"atty",
"backtrace",
"common-error",
"console-subscriber",

View File

@@ -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 }

View File

@@ -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: