Application-text-async-logger
ApplicationTextAsyncLogger is the application-facing async logger alias for text-console output. It currently maps directly to AsyncLogger[@bitlogger.FormattedConsoleSink] and keeps the same async lifecycle and queue helper surface while preserving the concrete text sink shape.
Interface
pub type ApplicationTextAsyncLogger = AsyncLogger[@bitlogger.FormattedConsoleSink]output
ApplicationTextAsyncLogger- Application-facing name for the text-console async logger shape.
Explanation
Detailed rules explaining key parameters and behaviors
- This alias does not introduce a new runtime type or wrapper layer.
- It preserves the same async lifecycle helpers as other async logger aliases.
- Because it is
AsyncLogger[@bitlogger.FormattedConsoleSink], the alias also keeps ordinary async logger composition and target behavior such aswith_target(...),child(...), and per-calllog(..., target=...)overrides. - In particular,
log(..., target=...)can override the target for one call, while severity helpers such asinfo(...),warn(...), anderror(...)continue using the stored logger target unless code derives another logger first withwith_target(...)orchild(...). - Like the broader runtime-sink async alias,
with_context_fields(...)andbind(...)preserve the visibleApplicationTextAsyncLoggershape because shared fields are stored directly on the async logger value instead of being modeled as a separate sink wrapper. - Because this is only an alias, methods that are async on
AsyncLogger[@bitlogger.FormattedConsoleSink]remain async here as well. - The alias therefore keeps the same text-console-specific builder and lifecycle semantics already documented on
AsyncLogger[@bitlogger.FormattedConsoleSink], including the concrete sink shape plus the same close, queue, and failure-state behavior. - The application-facing type does not hide any async state or lifecycle helpers; queue/backlog/failure inspection remains directly available on this alias just as it is on the underlying
AsyncLogger[@bitlogger.FormattedConsoleSink]. - In the current direct alias coverage, values built through
build_application_text_async_logger(...)keep the same serialized state snapshot shape, formatter behavior, queue counters, lifecycle flags, and failure fields that the underlying text-console async logger exposes directly. - When the value is built through
build_application_text_async_logger(...), the direct async counters come from the outer async logger only; any optional sync queue configured onLoggerConfig.queueis not carried into this text-specific build path. - When the value is built through
build_application_text_async_logger(...),logger.sink.kindalso does not decide the runtime sink shape. The builder still constructsFormattedConsoleSinkfromlogger.sink.text_formatter, even if the config saidConsole,JsonConsole, orFile. - When the value is built through
build_application_text_async_logger(...),flush_policy()still reports the configured async policy, but the text-specific build path keeps the default no-op async flush callback instead of wiring an explicit sink flush step. - The alias exists to give application code a clearer public name when it wants the concrete text-console sink shape explicitly.
build_application_text_async_logger(...)returns this alias.
How to Use
Here are some specific examples provided.
When Need An App-level Name For Text-console Async Output
When application code wants a stable type name for a text-console async logger:
let logger : ApplicationTextAsyncLogger = build_application_text_async_logger(
AsyncLoggerBuildConfig::new(logger=text_console(target="app.text.async")),
)In this example, the application alias keeps the same underlying async logger behavior while preserving the text sink shape explicitly.
When Pass A Text-console Async Logger Through App-level APIs
When caller code should know it is working with the text-console variant:
async fn start_text_async(logger : ApplicationTextAsyncLogger) -> Unit {
logger.run()
}In this example, the app-facing alias communicates the concrete text-console async shape directly, while run() keeps its async calling contract.
And the same pending-count, state, and failure helpers remain directly available because no narrowing wrapper is added.
And the inherited async logger target rules stay the same: log(..., target=...) can override the target per call, while info(...), warn(...), and error(...) continue using the stored target unless code derives another logger first with with_target(...) or child(...).
When Need A One-call Target Override On The Text-console Alias
When app-level text-console async code should keep the same alias value but emit one record under a different target:
logger.log(@bitlogger.Level::Error, "boom", target="app.text.async.audit")In this example, the emitted record uses app.text.async.audit only for that one call.
And later info(...), warn(...), or error(...) calls still use the alias value's stored target unless code derives another logger first with with_target(...) or child(...).
When Need Shared Context On The Text-console Async Alias
When app-level text-console async code should attach stable metadata to later queued records:
let contextual = logger.with_context_fields([@bitlogger.field("service", "billing")])In this example, the returned value still has the visible type ApplicationTextAsyncLogger.
And that shape preservation is intentional because async context binding updates stored logger metadata instead of changing the exposed sink type.
Error Case
e.g.:
Because this is only an alias, any async target limitations or runtime behavior still apply unchanged.
If code does not need the concrete text-console sink shape,
ApplicationAsyncLoggeris the broader runtime-sink async alias.If the value came from
build_application_text_async_logger(...), carryinglogger.sink.kind=Filein the config still does not make this alias file-backed; that builder keeps the formatter-driven text-console path.If callers depend on the concrete formatter or direct text-console helper surface, they remain available on this alias because no wrapper layer narrows them away.
Notes
This alias is about naming and public intent, not a different async implementation.
Inherited
AsyncLoggerbehavior stays unchanged on this alias, including target overrides onlog(...)and derived target composition throughwith_target(...)andchild(...).Use
build_application_text_async_logger(...)when callers want theFormattedConsoleSink-backed async type explicitly.Use
ApplicationAsyncLoggerwhen application code should keep the broader runtime-sink shape instead of the text-console-specific one.Use
LibraryAsyncLogger[@bitlogger.FormattedConsoleSink]instead when a library boundary should intentionally narrow the exposed async surface while still preserving the concrete text sink type.