Async-logger-state-type
AsyncLoggerState is the public snapshot type used to describe an async logger's runtime status. It is a direct alias to the async logger state model returned by AsyncLogger::state() and used by async diagnostics serializers.
Interface
pub type AsyncLoggerState = @utils.AsyncLoggerStateoutput
AsyncLoggerState- Public async logger snapshot containingruntime,pending_count,dropped_count,is_closed,is_running,has_failed,last_error, andflush_policy.
Explanation
Detailed rules explaining key parameters and behaviors
- This is a type alias, not a live logger handle.
- The
runtimefield embeds anAsyncRuntimeStatesnapshot. - The remaining fields capture queue counts, lifecycle status, failure state, last error text, and active flush policy.
AsyncLogger::state()returns this type directly, whileasync_logger_state_to_json(...)andstringify_async_logger_state(...)export the same data shape for diagnostics.AsyncLogger::state()currently builds this snapshot fromasync_runtime_state()plus the logger's current counters, lifecycle flags, last error, and flush policy.- When the value comes from
AsyncLogger::state(), the fields are read one by one rather than through a transactional snapshot primitive. AsyncLoggerState::new(...)can also construct this type manually, but manual construction is synthetic snapshot data and does not read one live logger instant by itself.- The type itself does not distinguish live logger snapshots from hand-built ones; callers must track whether a given
AsyncLoggerStatevalue came fromAsyncLogger::state()or from manual construction. - When a live snapshot is taken after worker failure,
has_failed=true, a retainedlast_error, and non-zeropending_countmay legitimately coexist until later cleanup or restart.
How to Use
Here are some specific examples provided.
When Need A Typed Snapshot For Async Diagnostics
When application code should inspect async logger state before deciding how to report it:
let state : AsyncLoggerState = logger.state()In this example, queue, lifecycle, and runtime information stay available as structured data.
When Need To Branch On Failure Or Backlog
When code should react to the current async logger condition:
let state = logger.state()
if state.has_failed || state.pending_count > 0 {
println(stringify_async_logger_state(state, pretty=true))
}In this example, the typed snapshot supports both logic and later export.
Error Case
e.g.:
AsyncLoggerStateitself does not have a runtime failure mode.last_errormay be an empty string when no failure has occurred, which is normal and not a special error condition by itself.Because this is just a data shape, manual construction can represent combinations that do not come from a live logger at one exact instant.
Receiving an
AsyncLoggerStatevalue alone does not prove it came from one current logger read rather than from a synthetic constructor path.This type does not imply cleanup semantics by itself; values only report the supplied or captured fields and do not drain backlog or clear recorded failure state.
Notes
Use
AsyncLogger::state()when you need a value of this type from one logger instance.Use
AsyncRuntimeStatewhen only backend-level capability information is needed and logger-instance state is unnecessary.Use
async_logger_state_to_json(...)orstringify_async_logger_state(...)when this snapshot should leave typed space and become stable diagnostic output.