Skip to content

Commit 273f83e

Browse files
committed
reviews
1 parent 5a1d6ba commit 273f83e

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

β€Žpackages/service-library/src/servicelib/logging_utils.pyβ€Ž

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
Β (0)