From 700333ed485abb5bf55819df3a454b114fef95e1 Mon Sep 17 00:00:00 2001 From: PoulavBhowmick03 Date: Tue, 21 Jul 2026 11:42:17 +0530 Subject: [PATCH 1/5] cli: config --p2p-relay-loglevel into tracing filter --- crates/cli/src/commands/relay.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/crates/cli/src/commands/relay.rs b/crates/cli/src/commands/relay.rs index 4ae7317d..3fb0e8c9 100644 --- a/crates/cli/src/commands/relay.rs +++ b/crates/cli/src/commands/relay.rs @@ -12,6 +12,14 @@ use tracing::{error, info}; /// once `BackgroundTaskController::shutdown` has been signalled. const LOKI_FLUSH_TIMEOUT: Duration = Duration::from_secs(3); +fn relay_filter(base: &str, relay_level: &str) -> String { + if relay_level.is_empty() { + base.to_string() + } else { + format!("{base},libp2p_relay={relay_level}") + } +} + /// Arguments for the relay command. #[derive(clap::Args, Clone)] pub struct RelayArgs { @@ -90,14 +98,19 @@ impl TryInto for RelayArgs { } }; - let log_config = - build_console_tracing_config(self.log.level.clone(), &self.log.color, loki_config); + let p2p_relay = self.relay.p2p_relay_log_level; + + let log_config = build_console_tracing_config( + relay_filter(self.log.level.as_str(), &p2p_relay), + &self.log.color, + loki_config, + ); let builder = pluto_relay_server::config::Config::builder() .data_dir(self.data_dir.data_dir) .http_addr(self.relay.http_address) .auto_p2p_key(self.relay.auto_p2p_key) - .libp2p_log_level(self.relay.p2p_relay_log_level) + .libp2p_log_level(p2p_relay) .max_res_per_peer(self.relay.max_res_per_peer) .max_conns(self.relay.max_conns) // Invert p2p-advertise-private-addresses flag boolean: @@ -382,6 +395,8 @@ mod tests { use tokio::net; use tokio_util::sync::CancellationToken; + use crate::commands::relay::relay_filter; + #[tokio::test] async fn run_bootnode() { with_relay_server( @@ -640,4 +655,9 @@ mod tests { .build(); request.retry(&mut backoff).await } + #[test] + fn relay_filter_works() { + assert_eq!(relay_filter("info", ""), "info"); + assert_eq!(relay_filter("debug", "warn"), "debug,libp2p_relay=warn"); + } } From a98d16f03215324ccfd1f7ea14d47c59864f21f4 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Wed, 29 Jul 2026 17:37:03 -0300 Subject: [PATCH 2/5] Inline vars --- crates/cli/src/commands/relay.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/crates/cli/src/commands/relay.rs b/crates/cli/src/commands/relay.rs index 3fb0e8c9..d18415cf 100644 --- a/crates/cli/src/commands/relay.rs +++ b/crates/cli/src/commands/relay.rs @@ -98,10 +98,8 @@ impl TryInto for RelayArgs { } }; - let p2p_relay = self.relay.p2p_relay_log_level; - let log_config = build_console_tracing_config( - relay_filter(self.log.level.as_str(), &p2p_relay), + relay_filter(&self.log.level, &self.relay.p2p_relay_log_level), &self.log.color, loki_config, ); @@ -110,7 +108,7 @@ impl TryInto for RelayArgs { .data_dir(self.data_dir.data_dir) .http_addr(self.relay.http_address) .auto_p2p_key(self.relay.auto_p2p_key) - .libp2p_log_level(p2p_relay) + .libp2p_log_level(self.relay.p2p_relay_log_level) .max_res_per_peer(self.relay.max_res_per_peer) .max_conns(self.relay.max_conns) // Invert p2p-advertise-private-addresses flag boolean: From fc00c32ae1fabbc547cc97cce160cd11489adfd7 Mon Sep 17 00:00:00 2001 From: "emlautarom1-agent[bot]" <292495798+emlautarom1-agent[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:05:24 -0300 Subject: [PATCH 3/5] refactor(relay): drop the unused libp2p_log_level config field --- crates/cli/src/commands/relay.rs | 1 - crates/relay-server/src/config.rs | 3 --- 2 files changed, 4 deletions(-) diff --git a/crates/cli/src/commands/relay.rs b/crates/cli/src/commands/relay.rs index d18415cf..43c2b46b 100644 --- a/crates/cli/src/commands/relay.rs +++ b/crates/cli/src/commands/relay.rs @@ -108,7 +108,6 @@ impl TryInto for RelayArgs { .data_dir(self.data_dir.data_dir) .http_addr(self.relay.http_address) .auto_p2p_key(self.relay.auto_p2p_key) - .libp2p_log_level(self.relay.p2p_relay_log_level) .max_res_per_peer(self.relay.max_res_per_peer) .max_conns(self.relay.max_conns) // Invert p2p-advertise-private-addresses flag boolean: diff --git a/crates/relay-server/src/config.rs b/crates/relay-server/src/config.rs index d77596a9..4deb6622 100644 --- a/crates/relay-server/src/config.rs +++ b/crates/relay-server/src/config.rs @@ -49,9 +49,6 @@ pub struct Config { /// Whether to filter private addresses. #[builder(default = false)] pub filter_private_addrs: bool, - /// LibP2PLogLevel. - #[builder(default = "Info".to_string())] - pub libp2p_log_level: String, } pub(crate) fn create_relay_config(config: &Config) -> relay::Config { From ea2979948b353679270fc6d81e357f7fb975dbb4 Mon Sep 17 00:00:00 2001 From: "emlautarom1-agent[bot]" <292495798+emlautarom1-agent[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:06:49 -0300 Subject: [PATCH 4/5] docs(relay): document the relay_filter env-filter target --- crates/cli/src/commands/relay.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/cli/src/commands/relay.rs b/crates/cli/src/commands/relay.rs index 43c2b46b..0eddcbdf 100644 --- a/crates/cli/src/commands/relay.rs +++ b/crates/cli/src/commands/relay.rs @@ -12,6 +12,8 @@ use tracing::{error, info}; /// once `BackgroundTaskController::shutdown` has been signalled. const LOKI_FLUSH_TIMEOUT: Duration = Duration::from_secs(3); +/// Adds a `libp2p_relay` directive to the `base` env filter, which `EnvFilter` +/// prefix-matches against every `libp2p_relay::*` target. fn relay_filter(base: &str, relay_level: &str) -> String { if relay_level.is_empty() { base.to_string() From e298f4ba9c9825ec898efb75f3c8e610b27919df Mon Sep 17 00:00:00 2001 From: "emlautarom1-agent[bot]" <292495798+emlautarom1-agent[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:18:30 -0300 Subject: [PATCH 5/5] test(relay): assert relay_filter scopes upstream relay logs --- Cargo.lock | 1 + crates/cli/Cargo.toml | 1 + crates/cli/src/commands/relay.rs | 25 ++++++++++++++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f82f4d0f..e0feb062 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5216,6 +5216,7 @@ dependencies = [ "tokio", "tokio-util", "tracing", + "tracing-subscriber", "url", "wiremock", ] diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index ce98d69d..0be8cbdc 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -49,6 +49,7 @@ sha2.workspace = true [dev-dependencies] tempfile.workspace = true +tracing-subscriber.workspace = true test-case.workspace = true backon.workspace = true wiremock.workspace = true diff --git a/crates/cli/src/commands/relay.rs b/crates/cli/src/commands/relay.rs index 0eddcbdf..763d3942 100644 --- a/crates/cli/src/commands/relay.rs +++ b/crates/cli/src/commands/relay.rs @@ -393,8 +393,8 @@ mod tests { use std::{str::FromStr, time}; use tokio::net; use tokio_util::sync::CancellationToken; - - use crate::commands::relay::relay_filter; + use tracing::{Level, enabled}; + use tracing_subscriber::{EnvFilter, layer::SubscriberExt as _}; #[tokio::test] async fn run_bootnode() { @@ -654,9 +654,24 @@ mod tests { .build(); request.retry(&mut backoff).await } + + /// Runs `f` with a subscriber that only lets `filter` through. + fn with_filter(filter: &str, f: impl FnOnce()) { + let filter = EnvFilter::from_str(filter).expect("relay filter should be a valid EnvFilter"); + tracing::subscriber::with_default(tracing_subscriber::registry().with(filter), f); + } + #[test] - fn relay_filter_works() { - assert_eq!(relay_filter("info", ""), "info"); - assert_eq!(relay_filter("debug", "warn"), "debug,libp2p_relay=warn"); + fn relay_filter_scopes_upstream_relay_logs() { + // An empty relay level leaves the base filter alone. + with_filter(&super::relay_filter("info", ""), || { + assert!(enabled!(target: "libp2p_relay::behaviour::handler", Level::WARN)); + }); + + // A relay level silences the upstream relay crate but not our own logs. + with_filter(&super::relay_filter("info", "error"), || { + assert!(!enabled!(target: "libp2p_relay::behaviour::handler", Level::WARN)); + assert!(enabled!(target: "pluto_relay_server::p2p", Level::INFO)); + }); } }