Source code for psipose.logging

"""Opt-in loguru diagnostics for psipose."""

from __future__ import annotations

import sys
from typing import Any

from loguru import logger as _logger

_HANDLER_ID: int | None = None
_DEFAULT_FORMAT = (
    "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
    "<level>{level: <8}</level> | "
    "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
    "<level>{message}</level>"
)

_logger.disable("psipose")


[docs] def configure_logging( *, sink: Any = None, level: str = "INFO", format: str = _DEFAULT_FORMAT, replace: bool = True, **kwargs, ) -> int: """Configure loguru output for psipose diagnostics. Parameters ---------- sink : object, optional Loguru sink. Defaults to ``sys.stderr``. level : str, default="INFO" Minimum log level for emitted records. format : str, default=_DEFAULT_FORMAT Loguru message format. replace : bool, default=True Whether to remove existing loguru handlers before adding this sink. **kwargs Additional keyword arguments passed to ``loguru.logger.add``. Returns ------- int The loguru handler id. """ global _HANDLER_ID if sink is None: sink = sys.stderr if replace: _logger.remove() _HANDLER_ID = None _HANDLER_ID = _logger.add(sink, level=level, format=format, **kwargs) _logger.enable("psipose") return _HANDLER_ID
[docs] def disable_logging() -> None: """Disable psipose diagnostics and remove the configured handler.""" global _HANDLER_ID if _HANDLER_ID is not None: _logger.remove(_HANDLER_ID) _HANDLER_ID = None _logger.disable("psipose")
[docs] def get_logger(name: str = "psipose"): """Return a loguru logger bound with psipose context.""" return _logger.bind(package="psipose", component=name)