from typing import Any from loguru import logger from .config import DEBUG from .engine import CachingEngine from .exceptions import ReadOnlyError, UnsupportedQueryError _DEFAULT_FORMAT = ( "{time:YYYY-MM-DD HH:mm:ss} | " "{level: <8} | " "{name}:{line} - " "{message}" ) def add_sink(sink: Any, *, level: str | None = None, **kwargs: Any) -> None: """Route sqlmem log records to *sink*. Accepts any sink supported by loguru (file path, stream, callable, …). *level* defaults to ``DEBUG`` when ``SQLMEM_DEBUG=true``, otherwise ``INFO``. Extra keyword arguments are forwarded to :func:`loguru.logger.add`. Example:: import sys from sqlmem import add_sink add_sink(sys.stderr) add_sink("sqlmem.log", rotation="10 MB") """ logger.enable("sqlmem") kwargs.setdefault("format", _DEFAULT_FORMAT) kwargs.setdefault("colorize", True) logger.add(sink, level=level or ("DEBUG" if DEBUG else "INFO"), filter="sqlmem", **kwargs) __all__ = ["CachingEngine", "ReadOnlyError", "UnsupportedQueryError", "add_sink"]