From 6d7ba58f880be618ade07f8ea080fe8c4bf8a896 Mon Sep 17 00:00:00 2001 From: cyfraeviolae Date: Wed, 3 Apr 2024 03:10:44 -0400 Subject: venv --- .../site-packages/litestar/logging/standard.py | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 venv/lib/python3.11/site-packages/litestar/logging/standard.py (limited to 'venv/lib/python3.11/site-packages/litestar/logging/standard.py') diff --git a/venv/lib/python3.11/site-packages/litestar/logging/standard.py b/venv/lib/python3.11/site-packages/litestar/logging/standard.py new file mode 100644 index 0000000..131c0ed --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/logging/standard.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +import atexit +from logging import Handler, LogRecord, StreamHandler +from logging.handlers import QueueHandler, QueueListener +from queue import Queue +from typing import Any + +from litestar.logging._utils import resolve_handlers + +__all__ = ("LoggingQueueListener", "QueueListenerHandler") + + +class LoggingQueueListener(QueueListener): + """Custom ``QueueListener`` which starts and stops the listening process.""" + + def __init__(self, queue: Queue[LogRecord], *handlers: Handler, respect_handler_level: bool = False) -> None: + """Initialize ``LoggingQueueListener``. + + Args: + queue: The queue to send messages to + *handlers: A list of handlers which will handle entries placed on the queue + respect_handler_level: If ``respect_handler_level`` is ``True``, a handler's level is respected (compared with the level for the message) when deciding whether to pass messages to that handler + """ + super().__init__(queue, *handlers, respect_handler_level=respect_handler_level) + self.start() + atexit.register(self.stop) + + +class QueueListenerHandler(QueueHandler): + """Configure queue listener and handler to support non-blocking logging configuration. + + .. caution:: + + This handler doesn't work with Python >= 3.12 and ``logging.config.dictConfig``. It might + be deprecated in the future. Please use ``logging.QueueHandler`` instead. + """ + + def __init__(self, handlers: list[Any] | None = None) -> None: + """Initialize ``QueueListenerHandler``. + + Args: + handlers: Optional 'ConvertingList' + """ + super().__init__(Queue(-1)) + handlers = resolve_handlers(handlers) if handlers else [StreamHandler()] + self.listener = LoggingQueueListener(self.queue, *handlers) # type: ignore[arg-type] -- cgit v1.2.3