Skip to content

Fanout-sink

Create a sink that writes every record to two underlying sinks. This helper is useful when the same log stream should be duplicated across multiple destinations.

Interface

moonbit
pub fn[A, B] fanout_sink(left : A, right : B) -> FanoutSink[A, B] {

input

  • left : A - First sink destination.
  • right : B - Second sink destination.

output

  • FanoutSink[A, B] - Sink that duplicates records to both destinations.

Explanation

Detailed rules explaining key parameters and behaviors

  • Each record is written to both sinks.
  • The right side receives a copied record so the two writes remain independent at the record value level.
  • This helper is useful for combinations such as console plus JSON, or console plus callback capture.

How to Use

Here are some specific examples provided.

When Need Dual Output Paths

When the same records should go to both human and machine-oriented outputs:

moonbit
let logger = Logger::new(
  fanout_sink(console_sink(), json_console_sink()),
  target="dual",
)

In this example, each record is written to both console sinks.

Error Case

e.g.:

  • If only one path should receive a record conditionally, use split_sink(...) instead.

  • Sink-specific failures still follow the behavior of the wrapped sinks.

Notes

  1. This helper is a duplication primitive, not a conditional router.

  2. It is often useful in examples and test capture setups.

Published from the repository docs folder with VitePress.