3.2 KiB
name, group, category, update-time, description, key-word
| name | group | category | update-time | description | key-word | ||||
|---|---|---|---|---|---|---|---|---|---|
| async-logger-is-closed | api | async | 20260707 | Read whether the async logger has entered closed lifecycle state and should no longer be treated as a normal active enqueue target. |
|
Async-logger-is-closed
Read whether the async logger has been closed. This helper is useful for lifecycle checks around shutdown and queue finalization.
Interface
pub fn[S] AsyncLogger::is_closed(self : AsyncLogger[S]) -> Bool {}
input
self : AsyncLogger[S]- Async logger whose closure state should be inspected.
output
Bool- Whether the logger has already been closed.
Explanation
Detailed rules explaining key parameters and behaviors
close(...)sets the closed state immediately.shutdown(...)also results in a closed logger by the end of its lifecycle flow.- A closed logger should no longer be treated as a normal active enqueue target.
- This helper is derived from the current lifecycle phase rather than from an independent closed flag ref.
- This helper reflects lifecycle state only and does not indicate whether the worker is still draining.
is_closed()becomingtruedoes not imply the logger reached a clean success state. Failure flags, retainedlast_error(), and remaining backlog-related counters can still reflect the earlier worker outcome.- After shutdown on a worker-failure path,
is_closed()can therefore betruewhile retained failure state still remains visible underphase=closed_failed. - Late log attempts are rejected in the shared async log path after closure, so
is_closed()now aligns with a stable post-close enqueue rejection contract.
How to Use
Here are some specific examples provided.
When Guard Late-stage Logging
When code should avoid treating a logger as fully active during teardown:
if logger.is_closed() {
println("logger already closed")
}
In this example, teardown logic can branch on the closure state.
When Verify Shutdown Progress
When tests or diagnostics want to inspect lifecycle state:
logger.close()
ignore(logger.is_closed())
In this example, the helper confirms that close state was entered.
Error Case
e.g.:
-
If
is_closed()returnstrue, pending records may still exist until drain or clear behavior completes. -
If callers need to know whether the worker is still active, they should also inspect
is_running(). -
If callers need to know whether the logger is also terminal or rerunnable, they should inspect
state().terminalorstate().can_rerun. -
Closing a logger does not by itself reset
has_failed()orlast_error(). -
A closed logger can still report leftover
pending_count()ordropped_count()values from the shutdown path, sois_closed()alone is not enough to infer whether backlog was fully drained or explicitly abandoned.
Notes
-
Closed state and running state are related but not identical.
-
Use this helper when lifecycle control matters more than queue counters.
-
Pair it with
pending_count(),is_running(), orstate()when you need to understand what closure means for remaining backlog on a live logger instance.