Source code for ankipandas.util.log

# std
from __future__ import annotations

import logging

import colorlog

LOG_DEFAULT_LEVEL = logging.INFO


[docs]def get_logger(): """Sets up global logger.""" _log = colorlog.getLogger("AnkiPandas") if _log.handlers: # the logger already has handlers attached to it, even though # we didn't add it ==> logging.get_logger got us an existing # logger ==> we don't need to do anything return _log _log.setLevel(LOG_DEFAULT_LEVEL) sh = colorlog.StreamHandler() log_colors = { "DEBUG": "cyan", "INFO": "green", "WARNING": "yellow", "ERROR": "red", "CRITICAL": "red", } formatter = colorlog.ColoredFormatter( "%(log_color)s%(levelname)s: %(message)s", log_colors=log_colors ) sh.setFormatter(formatter) # Controlled by overall logger level sh.setLevel(logging.DEBUG) _log.addHandler(sh) return _log
[docs]def set_log_level(level: str | int) -> None: """Set global log level. Args: level: Either an int (https://docs.python.org/3/library/logging.html#levels) or one of the keywords, 'critical' (only the most terrifying of log messages), 'error', 'warning', 'info', 'debug' (all log messages) Returns: None """ lvl = level if isinstance(level, str): lvl = getattr(logging, level.upper()) get_logger().setLevel(lvl)
[docs]def set_debug_log_level() -> None: """Set global log level to debug.""" set_log_level(logging.DEBUG)
log = get_logger()