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"]