Source code for rmote.tools.logger

import logging
from typing import Any

from rmote.protocol import Tool


[docs] class Logger(Tool): """Control logging on the remote side and forward records to the local process. Log records emitted on the remote side are forwarded over the protocol channel and appear locally under the ``rmote.remote.<name>`` logger hierarchy. """ @staticmethod def _check_level(level: str) -> int: level_upper = level.upper() if level_upper not in ["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]: raise ValueError(f"Invalid log level: {level}") return int(getattr(logging, level_upper))
[docs] @classmethod def set_log_level(cls, level: str) -> None: """Set the root logger level on the remote side. Args: level: One of ``"NOTSET"``, ``"DEBUG"``, ``"INFO"``, ``"WARNING"``, ``"ERROR"``, or ``"CRITICAL"`` (case-insensitive). Raises: ValueError: If *level* is not a recognised level name. """ levelno = cls._check_level(level) logging.info("Setting log level to %s", level) logging.getLogger().setLevel(levelno)
[docs] @classmethod def log(cls, level: str, message: str, *args: Any) -> None: """Emit a log record on the remote side. The record is forwarded to the local logging system via the protocol's LOG packet and appears under the ``rmote.remote.<name>`` logger. Args: level: Log level name (e.g. ``"INFO"``, ``"DEBUG"``). message: Log message format string (``%``-style). *args: Arguments merged into *message*. Raises: ValueError: If *level* is not a recognised level name. """ levelno = Logger._check_level(level) logging.log(levelno, message, *args)