From c2eefddb4f4c054f81d5f9660ef6ca1fc19c2088 Mon Sep 17 00:00:00 2001 From: "glm-5.1" Date: Fri, 12 Jun 2026 10:15:50 +0000 Subject: [PATCH] Disable ANSI colors in logs and fix fail2ban regex - Add with_ansi(false) to all tracing_subscriber fmt layers so log output (both stdout and file) is plain text without escape codes. This is critical for Docker deployments and fail2ban log parsing. - Remove ^ anchor from fail2ban failregex since log lines have a timestamp/level prefix before RATE_LIMIT. --- deploy/fail2ban/filter.d/reverse-proxy.conf | 2 +- src/logging/mod.rs | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/deploy/fail2ban/filter.d/reverse-proxy.conf b/deploy/fail2ban/filter.d/reverse-proxy.conf index 77fe452..52203b4 100644 --- a/deploy/fail2ban/filter.d/reverse-proxy.conf +++ b/deploy/fail2ban/filter.d/reverse-proxy.conf @@ -1,3 +1,3 @@ [Definition] -failregex = ^RATE_LIMIT client_ip= host=\S+ path=\S+ status=\d+$ +failregex = RATE_LIMIT client_ip= host=\S+ path=\S+ status=\d+ ignoreregex = \ No newline at end of file diff --git a/src/logging/mod.rs b/src/logging/mod.rs index 4ebcda3..2075170 100644 --- a/src/logging/mod.rs +++ b/src/logging/mod.rs @@ -51,7 +51,7 @@ fn init_json(env_filter: EnvFilter, log_file_path: &Option, level: Level } None => { let layer = tracing_subscriber::fmt::layer() - .json() + .with_ansi(false) .with_filter(env_filter); tracing_subscriber::registry().with(layer).try_init()?; } @@ -72,8 +72,11 @@ fn init_text(env_filter: EnvFilter, log_file_path: &Option, level: Level let file_writer = Arc::new(file); let file_env_filter = make_env_filter(level); - let stdout_layer = tracing_subscriber::fmt::layer().with_filter(env_filter); + let stdout_layer = tracing_subscriber::fmt::layer() + .with_ansi(false) + .with_filter(env_filter); let file_layer = tracing_subscriber::fmt::layer() + .with_ansi(false) .with_writer(file_writer) .with_filter(file_env_filter); tracing_subscriber::registry() @@ -82,7 +85,9 @@ fn init_text(env_filter: EnvFilter, log_file_path: &Option, level: Level .try_init()?; } None => { - let layer = tracing_subscriber::fmt::layer().with_filter(env_filter); + let layer = tracing_subscriber::fmt::layer() + .with_ansi(false) + .with_filter(env_filter); tracing_subscriber::registry().with(layer).try_init()?; } }