Skip to content

Callback-sink

Create a sink that forwards each Record to a callback. This is the most direct built-in integration hook for tests, adapters, and custom side effects.

Interface

moonbit
pub fn callback_sink(callback : (Record) -> Unit) -> CallbackSink {

input

  • callback : (Record) -> Unit - Function called for each emitted record.

output

  • CallbackSink - Sink that forwards records to the callback.

Explanation

Detailed rules explaining key parameters and behaviors

  • The callback receives the full structured record.
  • This sink is useful for tests, custom bridges, or integration code that wants raw record access.
  • Formatting is not applied automatically because the callback works on Record values directly.

How to Use

Here are some specific examples provided.

When Need To Capture Structured Records

When tests or adapters want direct access to target, message, and fields:

moonbit
let logger = Logger::new(
  callback_sink(fn(rec) {
    println(rec.target)
  }),
  target="hook",
)

In this example, the callback sees the structured record rather than pre-rendered text.

Error Case

e.g.:

  • If text output is needed instead of raw records, use text_callback_sink(...).

  • Callback behavior is fully user-defined, so failures inside the callback are outside the sink's own API contract.

Notes

  1. This sink is commonly useful in tests and adapters.

  2. It composes naturally with filter, patch, fanout, and queue wrappers.

Published from the repository docs folder with VitePress.