Skip to content

Commit

Permalink
client: fix log filters (paritytech#7241)
Browse files Browse the repository at this point in the history
* client: fix multiple logger filters

* client: add test for log filters setup
  • Loading branch information
andresilva authored and liuchengxu committed Oct 5, 2020
1 parent 78e5f4c commit baa74d4
Showing 1 changed file with 54 additions and 3 deletions.
57 changes: 54 additions & 3 deletions client/cli/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ use structopt::{
clap::{self, AppSettings},
StructOpt,
};
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::{filter::Directive, layer::SubscriberExt};

/// Substrate client CLI
///
Expand Down Expand Up @@ -234,6 +234,13 @@ pub fn init_logger(
tracing_receiver: sc_tracing::TracingReceiver,
tracing_targets: Option<String>,
) -> std::result::Result<(), String> {
fn parse_directives(dirs: impl AsRef<str>) -> Vec<Directive> {
dirs.as_ref()
.split(',')
.filter_map(|s| s.parse().ok())
.collect()
}

if let Err(e) = tracing_log::LogTracer::init() {
return Err(format!(
"Registering Substrate logger failed: {:}!", e
Expand All @@ -257,7 +264,7 @@ pub fn init_logger(
if lvl != "" {
// We're not sure if log or tracing is available at this moment, so silently ignore the
// parse error.
if let Ok(directive) = lvl.parse() {
for directive in parse_directives(lvl) {
env_filter = env_filter.add_directive(directive);
}
}
Expand All @@ -266,7 +273,7 @@ pub fn init_logger(
if pattern != "" {
// We're not sure if log or tracing is available at this moment, so silently ignore the
// parse error.
if let Ok(directive) = pattern.parse() {
for directive in parse_directives(pattern) {
env_filter = env_filter.add_directive(directive);
}
}
Expand Down Expand Up @@ -299,3 +306,47 @@ pub fn init_logger(
}
Ok(())
}

#[cfg(test)]
mod tests {
use super::*;
use tracing::{metadata::Kind, subscriber::Interest, Callsite, Level, Metadata};

#[test]
fn test_logger_filters() {
let test_pattern = "afg=debug,sync=trace,client=warn,telemetry";
init_logger(&test_pattern, Default::default(), Default::default()).unwrap();

tracing::dispatcher::get_default(|dispatcher| {
let test_filter = |target, level| {
struct DummyCallSite;
impl Callsite for DummyCallSite {
fn set_interest(&self, _: Interest) {}
fn metadata(&self) -> &Metadata<'_> {
unreachable!();
}
}

let metadata = tracing::metadata!(
name: "",
target: target,
level: level,
fields: &[],
callsite: &DummyCallSite,
kind: Kind::SPAN,
);

dispatcher.enabled(&metadata)
};

assert!(test_filter("afg", Level::INFO));
assert!(test_filter("afg", Level::DEBUG));
assert!(!test_filter("afg", Level::TRACE));

assert!(test_filter("sync", Level::TRACE));
assert!(test_filter("client", Level::WARN));

assert!(test_filter("telemetry", Level::TRACE));
});
}
}

0 comments on commit baa74d4

Please sign in to comment.