Skip to content

Target-has-prefix ​

Create a RecordPredicate that returns true when a record target starts with a given prefix. This helper is commonly used with with_filter(...), filter_sink(...), all_of(...), and routing logic.

Interface ​

moonbit
pub fn target_has_prefix(prefix : String) -> RecordPredicate {}

input ​

  • prefix : String - Prefix expected at the start of rec.target.

output ​

  • RecordPredicate - Predicate that matches records whose target starts with the given prefix.

Explanation ​

Detailed rules explaining key parameters and behaviors

  • Matching is based on String::has_prefix(...) over the full target string.
  • This helper does not modify records; it only returns a reusable predicate.
  • Prefix-based matching is especially useful when using hierarchical targets such as app.worker.job.
  • It composes cleanly with all_of(...), any_of(...), and not_(...).

How to Use ​

Here are some specific examples provided.

When Filter A Target Namespace ​

When a logger should keep one target subtree:

moonbit
let logger = Logger::new(console_sink(), target="app")
  .with_filter(target_has_prefix("app.worker"))

In this example, only records under app.worker... remain visible.

And child targets continue to compose naturally.

When Combine With Level Rules ​

When both namespace and severity matter:

moonbit
let predicate = all_of([
  target_has_prefix("service.api"),
  level_at_least(Level::Warn),
])

In this example, the predicate stays reusable across multiple loggers or sinks.

Error Case ​

e.g.:

  • If prefix is empty, the predicate effectively matches every target because every string starts with an empty prefix.

  • If no target matches the prefix, the predicate simply returns false for those records.

Notes ​

  1. This helper is most useful when targets are structured hierarchically.

  2. Prefer this helper over ad hoc inline prefix logic for readability.

Published from the repository docs folder with VitePress.