Not
Create a RecordPredicate that returns the logical inverse of another predicate. This helper is the standard way to express exclusion rules without rewriting predicate bodies.
Interface
pub fn not_(predicate : RecordPredicate) -> RecordPredicate {}input
predicate : RecordPredicate- Existing predicate to invert.
output
RecordPredicate- Predicate that returnstruewhen the original predicate returnsfalse.
Explanation
Detailed rules explaining key parameters and behaviors
not_(...)delegates evaluation to the original predicate and flips the boolean result.- It does not change the record or short-circuit upstream logic outside the wrapped predicate.
- This helper is useful for excluding known noisy targets, fields, or message patterns.
- It composes well with
all_of(...)andany_of(...)for more expressive routing rules.
How to Use
Here are some specific examples provided.
When Exclude One Target Prefix
When everything except one noisy subsystem should pass:
let logger = Logger::new(console_sink())
.with_filter(not_(target_has_prefix("debug.spam")))In this example, records under debug.spam... are filtered out.
When Invert A Field Match
When one tenant should be excluded from a shared stream:
let predicate = not_(field_equals("tenant", "internal"))In this example, all non-internal tenant records continue through the filter.
Error Case
e.g.:
If the wrapped predicate always returns
true, the negated predicate always returnsfalse.If the wrapped predicate is too broad, the inversion may unintentionally admit unrelated records.
Notes
Prefer
not_(...)over duplicating inverse logic inline because the intent is easier to read.Negation is most maintainable when the wrapped predicate is itself narrow and well named.