Files
BitLogger/docs/api/file-sink-async.md
NanaloveyukiandGitHub b4d69675fd ⬆️ upgrade async and replace native file FFI
升级 async 依赖,迁移到 MoonBit 原生 async/fs 文件接口,移除项目自有 C FFI,并固定文本文件为 LF。CI 全部通过。
2026-08-25 16:06:37 +08:00

2.1 KiB

name, group, category, update-time, description, key-word
name group category update-time description key-word
file-sink-async api sink 20260825 Create a file sink from an async context using the native async filesystem interface.
file
sink
async
public

File-sink-async

Create a FileSink from an async context. The constructor opens the file with the native moonbitlang/async/fs interface and keeps the same rotation, policy, and failure-counter surface as file_sink(...).

Interface

pub async fn file_sink_async(
  path : String,
  append~ : Bool = true,
  auto_flush~ : Bool = true,
  rotation~ : FileRotation? = None,
  formatter~ : RecordFormatter = fn(rec) { format_text(rec) },
) -> FileSink {}

input

  • path : String - Destination file path.
  • append : Bool - Whether writes append rather than truncate on the first open.
  • auto_flush : Bool - Whether each async write requests an async file sync.
  • rotation : FileRotation? - Optional size-based rotation policy.
  • formatter : RecordFormatter - Formatter used to render each record.

output

  • FileSink - A file sink ready for use by an async logger or direct async sink writes.

Explanation

  • Use this constructor when the caller is already running inside an async event loop.
  • File writes, flushes, file-size checks, renames, removals, and rotation reopening use the async filesystem path.
  • The returned sink implements Sink::write_async(...); the synchronous write(...) surface remains available for synchronous callers.
  • On non-native targets, the sink follows the existing unavailable-backend behavior.

How to Use

let sink = file_sink_async("app.log", auto_flush=false)
let logger = async_logger(sink)

Error Case

  • If the initial async open fails, the returned sink is unavailable and increments open_failures().
  • Later async writes record write and rotation failures through the existing sink counters.

Notes

  1. Use file_sink(...) for synchronous construction outside an async event loop.

  2. Pair this API with native_files_supported() when code must also compile for non-native targets.