Skip to content
Open
Show file tree
Hide file tree
Changes from 6 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