import logging from pathlib import Path LOG_FMT = ( "[%(asctime)s] " "%(levelname)-8s " "[%(name)s] " "%(message)-70s " "(%(filename)s:%(lineno)d)" ) COLORS = { "DEBUG": "\033[37m", "INFO": "\033[32m", "WARNING": "\033[33m", "ERROR": "\033[31m", "CRITICAL": "\033[41m", "reset": "\033[0m", } class ColorFormatter(logging.Formatter): def format(self, record) -> str: color = COLORS.get(record.levelname, "") levelname = record.levelname record.levelname = f"{color}{levelname}{COLORS['reset']}" formatted = super().format(record) record.levelname = levelname return formatted def get_logger(name: str | None = None) -> logging.Logger: if not name: name = Path(__file__).stem logger = logging.getLogger(name) if not logger.hasHandlers(): handler = logging.StreamHandler() formatter = ColorFormatter(LOG_FMT, datefmt="%Y-%m-%d | %H:%M:%S") handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO) return logger