- Notifications
You must be signed in to change notification settings - Fork 3
Closed
Description
Based on discussion from #16, a new commit has added support for filtering by the absence or presence of keys in a record.
Here's a example filter which builds a filter that should match these semantics:
"Pass message
if key_exists(key) && not(key_matches(key, bad_value)) && not(key_matches(key, ""))".
fn filter<D>(drain: D, level: Level) -> KVFilter<D> where D: Drain { KVFilter::new(drain, level) .only_pass_on_any_key_present(["err".to_string()].iter()) .always_suppress_any(Some( HashMap::from_iter( vec![( "err".to_string(), HashSet::from_iter(vec!["None".to_string(), "".to_string()]), )] ) )) }To verify the behavior, below is a unit test to verify the above semantics of the filter.
#[cfg(test)] mod tests { use slog::{error, debug, info, Logger, Level, Drain}; use super::filter; #[test] fn should_not_log_info_messages() { let decorator = slog_term::PlainSyncDecorator::new(slog_term::TestStdoutWriter); let drain = slog_term::FullFormat::new(decorator).build().fuse(); let filter = filter(drain, Level::Debug).fuse(); let logger = Logger::root_typed(filter, o!()); // should discard info!(logger, "NO: test info"); info!(logger, "NO: test info"; "count" => 10); info!(logger, "NO: test error"; "err" => "None"); info!(logger, "NO: test error"; "err" => ""); debug!(logger, "NO: test debug"); // should log to drain info!(logger, "YES: test error"; "err" => "Panic!"); error!(logger, "YES: test error"); } }The output from this test shows several failure cases, i.e. a record that should be filtered was not.
Mar 10 18:58:03.032 INFO NO: test info Mar 10 18:58:03.033 INFO NO: test info, count: 10 Mar 10 18:58:03.033 INFO NO: test error, err: None Mar 10 18:58:03.033 INFO NO: test error, err: Mar 10 18:58:03.033 INFO YES: test error, err: Panic! Mar 10 18:58:03.033 ERRO YES: test error @przygienda I thought it'd be better to create a new issue for this, rather than inside an unrelated PR.
Metadata
Metadata
Assignees
Labels
No labels