Skip to content

Commit a88082a

Browse files
committed
fix: [#893] enable color in logs
1 parent 4832235 commit a88082a

File tree

5 files changed

+52
-13
lines changed

5 files changed

+52
-13
lines changed

src/bootstrap/logging.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn config_level_or_default(log_level: &Option<LogLevel>) -> LevelFilter {
4646
}
4747

4848
fn tracing_stdout_init(filter: LevelFilter, style: &TraceStyle) {
49-
let builder = tracing_subscriber::fmt().with_max_level(filter).with_ansi(false);
49+
let builder = tracing_subscriber::fmt().with_max_level(filter).with_ansi(true);
5050

5151
let () = match style {
5252
TraceStyle::Default => builder.init(),

src/console/ci/e2e/logs_parser.rs

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
//! Utilities to parse Torrust Tracker logs.
22
use serde::{Deserialize, Serialize};
33

4-
const UDP_TRACKER_PATTERN: &str = "UDP TRACKER: Started on: udp://";
5-
const HTTP_TRACKER_PATTERN: &str = "HTTP TRACKER: Started on: ";
6-
const HEALTH_CHECK_PATTERN: &str = "HEALTH CHECK API: Started on: ";
4+
const INFO_LOG_LEVEL: &str = "INFO";
5+
6+
const UDP_TRACKER_TARGET: &str = "UDP TRACKER";
7+
const UDP_TRACKER_SOCKET_ADDR_START_PATTERN: &str = "Started on: udp://";
8+
9+
const HTTP_TRACKER_TARGET: &str = "HTTP TRACKER";
10+
const HTTP_TRACKER_URL_START_PATTERN: &str = "Started on: ";
11+
12+
const HEALTH_CHECK_TARGET: &str = "HEALTH CHECK API";
13+
const HEALTH_CHECK_URL_START_PATTERN: &str = "Started on: ";
714

815
#[derive(Serialize, Deserialize, Debug, Default)]
916
pub struct RunningServices {
@@ -59,11 +66,11 @@ impl RunningServices {
5966
let mut health_checks: Vec<String> = Vec::new();
6067

6168
for line in logs.lines() {
62-
if let Some(address) = Self::extract_address_if_matches(line, UDP_TRACKER_PATTERN) {
69+
if let Some(address) = Self::extract_udp_tracker_url(line) {
6370
udp_trackers.push(address);
64-
} else if let Some(address) = Self::extract_address_if_matches(line, HTTP_TRACKER_PATTERN) {
71+
} else if let Some(address) = Self::extract_http_tracker_url(line) {
6572
http_trackers.push(address);
66-
} else if let Some(address) = Self::extract_address_if_matches(line, HEALTH_CHECK_PATTERN) {
73+
} else if let Some(address) = Self::extract_health_check_api_url(line) {
6774
health_checks.push(format!("{address}/health_check"));
6875
}
6976
}
@@ -75,9 +82,32 @@ impl RunningServices {
7582
}
7683
}
7784

78-
fn extract_address_if_matches(line: &str, pattern: &str) -> Option<String> {
79-
line.find(pattern)
80-
.map(|start| Self::replace_wildcard_ip_with_localhost(line[start + pattern.len()..].trim()))
85+
fn extract_udp_tracker_url(line: &str) -> Option<String> {
86+
if !line.contains(INFO_LOG_LEVEL) || !line.contains(UDP_TRACKER_TARGET) {
87+
return None;
88+
};
89+
90+
line.find(UDP_TRACKER_SOCKET_ADDR_START_PATTERN).map(|start| {
91+
Self::replace_wildcard_ip_with_localhost(line[start + UDP_TRACKER_SOCKET_ADDR_START_PATTERN.len()..].trim())
92+
})
93+
}
94+
95+
fn extract_http_tracker_url(line: &str) -> Option<String> {
96+
if !line.contains(INFO_LOG_LEVEL) || !line.contains(HTTP_TRACKER_TARGET) {
97+
return None;
98+
};
99+
100+
line.find(HTTP_TRACKER_URL_START_PATTERN)
101+
.map(|start| Self::replace_wildcard_ip_with_localhost(line[start + HTTP_TRACKER_URL_START_PATTERN.len()..].trim()))
102+
}
103+
104+
fn extract_health_check_api_url(line: &str) -> Option<String> {
105+
if !line.contains(INFO_LOG_LEVEL) || !line.contains(HEALTH_CHECK_TARGET) {
106+
return None;
107+
};
108+
109+
line.find(HEALTH_CHECK_URL_START_PATTERN)
110+
.map(|start| Self::replace_wildcard_ip_with_localhost(line[start + HEALTH_CHECK_URL_START_PATTERN.len()..].trim()))
81111
}
82112

83113
fn replace_wildcard_ip_with_localhost(address: &str) -> String {
@@ -127,6 +157,15 @@ mod tests {
127157
assert_eq!(running_services.health_checks, vec!["http://127.0.0.1:1313/health_check"]);
128158
}
129159

160+
#[test]
161+
fn it_should_support_colored_output() {
162+
let logs = "\x1b[2m2024-06-14T14:40:13.028824Z\x1b[0m \x1b[33mINFO\x1b[0m \x1b[2mUDP TRACKER\x1b[0m: \x1b[37mStarted on: udp://0.0.0.0:6969\x1b[0m";
163+
164+
let running_services = RunningServices::parse_from_logs(logs);
165+
166+
assert_eq!(running_services.udp_trackers, vec!["127.0.0.1:6969"]);
167+
}
168+
130169
#[test]
131170
fn it_should_ignore_logs_with_no_matching_lines() {
132171
let logs = "[Other Service][INFO] Started on: 0.0.0.0:7070";

src/console/ci/e2e/runner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ pub fn run() -> anyhow::Result<()> {
116116
}
117117

118118
fn tracing_stdout_init(filter: LevelFilter) {
119-
tracing_subscriber::fmt().with_max_level(filter).with_ansi(false).init();
119+
tracing_subscriber::fmt().with_max_level(filter).init();
120120
info!("Logging initialized.");
121121
}
122122

src/console/clients/checker/app.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub async fn run() -> Result<Vec<CheckResult>> {
5858
}
5959

6060
fn tracing_stdout_init(filter: LevelFilter) {
61-
tracing_subscriber::fmt().with_max_level(filter).with_ansi(false).init();
61+
tracing_subscriber::fmt().with_max_level(filter).init();
6262
info!("logging initialized.");
6363
}
6464

src/console/clients/udp/app.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ pub async fn run() -> anyhow::Result<()> {
127127
}
128128

129129
fn tracing_stdout_init(filter: LevelFilter) {
130-
tracing_subscriber::fmt().with_max_level(filter).with_ansi(false).init();
130+
tracing_subscriber::fmt().with_max_level(filter).init();
131131
info!("logging initialized.");
132132
}
133133

0 commit comments

Comments
 (0)