@@ -268,7 +268,34 @@ def async_loggers(
268268 noisy_loggers : tuple [str , ...] | None ,
269269) -> Iterator [None ]:
270270 """
271- context manager for non-blocking logging infrastructure.
271+ Context manager for non-blocking logging infrastructure.
272+
273+ Flow Diagram:
274+ βββββββββββββββββββ ββββββββββββββββ βββββββββββββββββββ
275+ β Application β β Queue β β Background β
276+ β Thread βββββΆβ (unlimited) βββββΆβ Listener Thread β
277+ β β β β β β
278+ β logger.info() β β LogRecord β β StreamHandler β
279+ β logger.error() β β LogRecord β β ββ Formatter β
280+ β (non-blocking) β β LogRecord β β ββ Output β
281+ βββββββββββββββββββ ββββββββββββββββ βββββββββββββββββββ
282+ β β β
283+ β β βΌ
284+ β β βββββββββββββββ
285+ β β β Console/ β
286+ β β β Terminal β
287+ β β βββββββββββββββ
288+ β β
289+ βββββββββββββββββββββββββ΄β No blocking, immediate return
290+
291+ The async logging setup ensures that:
292+ 1. All log calls return immediately (non-blocking)
293+ 2. Log records are queued in an unlimited queue
294+ 3. A background thread processes the queue and handles actual I/O
295+ 4. All loggers propagate to root for centralized handling
296+
297+ For more details on the underlying implementation, see:
298+ https://docs.python.org/3/library/logging.handlers.html#queuehandler
272299
273300 Usage:
274301 with async_loggers(log_format_local_dev_enabled=True, logger_filter_mapping={}, tracing_settings=None):
@@ -279,6 +306,8 @@ def async_loggers(
279306 log_format_local_dev_enabled: Enable local development formatting
280307 logger_filter_mapping: Mapping of logger names to filtered message substrings
281308 tracing_settings: OpenTelemetry tracing configuration
309+ log_base_level: Base logging level to set
310+ noisy_loggers: Loggers to set to a quieter level
282311 """
283312 _setup_base_logging_level (log_base_level )
284313 if noisy_loggers is not None :
0 commit comments