diff options
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/logging/picologging.py')
-rw-r--r-- | venv/lib/python3.11/site-packages/litestar/logging/picologging.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/logging/picologging.py b/venv/lib/python3.11/site-packages/litestar/logging/picologging.py new file mode 100644 index 0000000..2cd599f --- /dev/null +++ b/venv/lib/python3.11/site-packages/litestar/logging/picologging.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +import atexit +from queue import Queue +from typing import Any + +from litestar.exceptions import MissingDependencyException +from litestar.logging._utils import resolve_handlers + +__all__ = ("QueueListenerHandler",) + + +try: + import picologging # noqa: F401 +except ImportError as e: + raise MissingDependencyException("picologging") from e + +from picologging import StreamHandler +from picologging.handlers import QueueHandler, QueueListener + + +class QueueListenerHandler(QueueHandler): + """Configure queue listener and handler to support non-blocking logging configuration.""" + + def __init__(self, handlers: list[Any] | None = None) -> None: + """Initialize ``QueueListenerHandler``. + + Args: + handlers: Optional 'ConvertingList' + + Notes: + - Requires ``picologging`` to be installed. + """ + super().__init__(Queue(-1)) + handlers = resolve_handlers(handlers) if handlers else [StreamHandler()] + self.listener = QueueListener(self.queue, *handlers) + self.listener.start() + + atexit.register(self.listener.stop) |