Skip to content

Async-flush-policy

AsyncFlushPolicy is the public enum that defines when an async logger should call its flush function. It is a direct alias to the async model enum used by AsyncLoggerConfig, worker execution, and async logger state reporting.

Interface

moonbit
pub type AsyncFlushPolicy = @utils.AsyncFlushPolicy

output

  • AsyncFlushPolicy - Public async flush enum with the variants Never, Batch, and Shutdown.

Explanation

Detailed rules explaining key parameters and behaviors

  • This is a type alias, not a separate lifecycle wrapper.
  • AsyncFlushPolicy::Never skips explicit flush calls from the async worker.
  • AsyncFlushPolicy::Batch calls the configured flush function after each processed batch.
  • AsyncFlushPolicy::Shutdown calls the configured flush function once after the worker loop exits.
  • The current flush policy is also exposed through AsyncLogger::flush_policy() and included in AsyncLoggerState.
  • The canonical labels Never, Batch, and Shutdown are also the labels emitted by async config and logger-state serializers, so parsing and diagnostics share one public vocabulary.
  • Async config parsing accepts the canonical label Never and also the compatibility alias None, both mapping to the same public enum variant.
  • Batch flushing happens after the worker finishes one drained batch, not after every individual record write.

How to Use

Here are some specific examples provided.

When Need Explicit Flush After Every Processed Batch

When buffered sinks should flush incrementally during worker execution:

moonbit
let config = AsyncLoggerConfig::new(flush=AsyncFlushPolicy::Batch)

In this example, each batch run triggers the provided flush callback.

When Need One Final Flush During Shutdown

When sink flushing should be deferred until the worker finishes:

moonbit
let config = AsyncLoggerConfig::new(flush=AsyncFlushPolicy::Shutdown)

In this example, flushing happens when the worker loop exits instead of after each batch.

Error Case

e.g.:

  • If async config text uses unsupported flush policy text, async config parsing raises a failure.

  • The parser error path for unsupported flush text is the same Failure surface used by the async config utilities.

  • If a sink never needs explicit flushing, Batch or Shutdown can add unnecessary work without changing output.

  • If the configured flush callback raises, the worker records failure state and stops instead of silently hiding the error.

Notes

  1. This policy only affects the async logger path and only matters when the configured sink has a meaningful flush function.

  2. AsyncFlushPolicy::Never is the default in AsyncLoggerConfig::new(...).

  3. Serialized config uses the canonical Never label even though the parser also accepts None.

Published from the repository docs folder with VitePress.