From 8084d0a0ccf18286f214e510fb141924d04370a3 Mon Sep 17 00:00:00 2001 From: Nanaloveyuki Date: Sun, 14 Jun 2026 02:27:05 +0800 Subject: [PATCH] :white_check_mark: cover library text async builder path --- docs/api/build-library-async-text-logger.md | 1 + src-async/BitLoggerAsync_test.mbt | 24 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/docs/api/build-library-async-text-logger.md b/docs/api/build-library-async-text-logger.md index 851d0d8..7b48c41 100644 --- a/docs/api/build-library-async-text-logger.md +++ b/docs/api/build-library-async-text-logger.md @@ -39,6 +39,7 @@ Detailed rules explaining key parameters and behaviors - It always produces a concrete `FormattedConsoleSink` from `config.logger.sink.text_formatter` instead of branching on sink kinds. - Unlike `build_library_async_logger(...)`, this facade does not go through the full synchronous configured-logger build path first. - It uses the selected text-oriented `LoggerConfig` fields directly and therefore does not apply `LoggerConfig.queue` or preserve sync runtime sink controls. +- A sync queue configured on `LoggerConfig.queue` is therefore ignored by this builder instead of being preserved behind the wrapped text-console async logger. - The returned facade wraps the same underlying `AsyncLogger[@bitlogger.FormattedConsoleSink]` value that `build_async_text_logger(...)` would return directly, so `run()`, `shutdown()`, failure/reset handling, and runtime-dependent close behavior are unchanged under the narrower public type. - Async state helpers such as `pending_count()`, `dropped_count()`, `state()`, `wait_idle()`, and failure-status inspection remain on the underlying `AsyncLogger[@bitlogger.FormattedConsoleSink]`, not on the returned facade itself. - `to_async_logger()` can recover the underlying full async logger if needed. diff --git a/src-async/BitLoggerAsync_test.mbt b/src-async/BitLoggerAsync_test.mbt index abeab6e..9bb5a82 100644 --- a/src-async/BitLoggerAsync_test.mbt +++ b/src-async/BitLoggerAsync_test.mbt @@ -547,6 +547,30 @@ test "library async text logger can be built from typed config" { inspect(full.target, content="async.lib.text") } +test "library async text logger builder ignores sync queue layer" { + let logger = build_library_async_text_logger( + AsyncLoggerBuildConfig::new( + logger=@bitlogger.LoggerConfig::new( + min_level=@bitlogger.Level::Warn, + target="async.lib.text.queued", + queue=Some(@bitlogger.QueueConfig::new(3, overflow=@bitlogger.QueueOverflowPolicy::DropNewest)), + sink=@bitlogger.SinkConfig::new( + kind=@bitlogger.SinkKind::TextConsole, + text_formatter=@bitlogger.TextFormatterConfig::new(show_timestamp=false, separator=" | "), + ), + ), + async_config=AsyncLoggerConfig::new(max_pending=2), + ), + ) + let full = logger.to_async_logger() + + inspect(logger.is_enabled(@bitlogger.Level::Error), content="true") + inspect(logger.is_enabled(@bitlogger.Level::Info), content="false") + inspect(full.target, content="async.lib.text.queued") + inspect(full.pending_count(), content="0") + inspect(full.dropped_count(), content="0") +} + async test "async logger can project to library async logger" { let logger = build_async_logger( AsyncLoggerBuildConfig::new(