Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
40 changes: 37 additions & 3 deletions crates/cli/src/commands/relay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ 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()
} else {
format!("{base},libp2p_relay={relay_level}")
}
}

/// Arguments for the relay command.
#[derive(clap::Args, Clone)]
pub struct RelayArgs {
Expand Down Expand Up @@ -90,14 +100,16 @@ impl TryInto<pluto_relay_server::config::Config> for RelayArgs {
}
};

let log_config =
build_console_tracing_config(self.log.level.clone(), &self.log.color, loki_config);
let log_config = build_console_tracing_config(
relay_filter(&self.log.level, &self.relay.p2p_relay_log_level),
&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)
.max_res_per_peer(self.relay.max_res_per_peer)
.max_conns(self.relay.max_conns)
// Invert p2p-advertise-private-addresses flag boolean:
Expand Down Expand Up @@ -381,6 +393,8 @@ mod tests {
use std::{str::FromStr, time};
use tokio::net;
use tokio_util::sync::CancellationToken;
use tracing::{Level, enabled};
use tracing_subscriber::{EnvFilter, layer::SubscriberExt as _};

#[tokio::test]
async fn run_bootnode() {
Expand Down Expand Up @@ -640,4 +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_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));
});
}
}
3 changes: 0 additions & 3 deletions crates/relay-server/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down