Spaces:
Runtime error
Runtime error
from __future__ import annotations | |
import logging | |
import os | |
from typing import Final | |
from colorama import Fore, Style, init as colorama_init | |
__all__: Final[list[str]] = ["get_logger"] | |
class _ColourFormatter(logging.Formatter): | |
_COLOUR_FOR_LEVEL = { | |
logging.DEBUG: Fore.CYAN, | |
logging.INFO: Fore.GREEN, | |
logging.WARNING: Fore.YELLOW, | |
logging.ERROR: Fore.RED, | |
logging.CRITICAL: Fore.MAGENTA, | |
} | |
def format(self, record: logging.LogRecord) -> str: # noqa: D401 | |
colour = self._COLOUR_FOR_LEVEL.get(record.levelno, "") | |
return f"{colour}{super().format(record)}{Style.RESET_ALL}" | |
def get_logger(name: str | None = None, level: int | None = None) -> logging.Logger: | |
"""Return a configured logger instance.""" | |
colorama_init() | |
env_level = os.getenv("LOG_LEVEL", "INFO").upper() | |
if level is None: | |
level = getattr(logging, env_level, logging.INFO) | |
handler = logging.StreamHandler() | |
handler.setFormatter( | |
_ColourFormatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s") | |
) | |
logger = logging.getLogger(name) | |
logger.setLevel(level) | |
logger.handlers.clear() | |
logger.addHandler(handler) | |
return logger | |