import logging class ColorFormatter(logging.Formatter): """Custom formatter with colored output based on log level""" # ANSI color codes GREY = "\x1b[38;21m" GREEN = "\x1b[92m" YELLOW = "\x1b[93m" RED = "\x1b[91m" BOLD_RED = "\x1b[31;1m" RESET = "\x1b[0m" # Format including function name FORMAT = "%(asctime)s | %(funcName)s | %(message)s" FORMATS = { logging.DEBUG: GREY + FORMAT + RESET, logging.INFO: GREEN + FORMAT + RESET, logging.WARNING: YELLOW + FORMAT + RESET, logging.ERROR: RED + FORMAT + RESET, logging.CRITICAL: BOLD_RED + FORMAT + RESET } def format(self, record): log_format = self.FORMATS.get(record.levelno) formatter = logging.Formatter(log_format) return formatter.format(record) def setup_logger(name, level=logging.INFO): """Set up a logger with the custom color formatter""" logger = logging.getLogger(name) logger.setLevel(level) # Create console handler console_handler = logging.StreamHandler() console_handler.setLevel(level) # Add formatter to console handler console_handler.setFormatter(ColorFormatter()) # Add console handler to logger logger.addHandler(console_handler) return logger