import logging # ANSI escape codes for colors COLOR_CODES = { 'RESET': '\033[0m', 'BOLD': '\033[1m', 'RED': '\033[31m', 'GREEN': '\033[32m', 'YELLOW': '\033[33m', 'BLUE': '\033[34m', } # Define colors for each log level LOG_COLORS = { 'DEBUG': COLOR_CODES['BLUE'], 'INFO': COLOR_CODES['GREEN'], 'WARNING': COLOR_CODES['YELLOW'], 'ERROR': COLOR_CODES['RED'], 'CRITICAL': COLOR_CODES['BOLD'] + COLOR_CODES['RED'], } # Create a formatter with colors class ColoredFormatter(logging.Formatter): def format(self, record): log_level = record.levelname record.levelname = f"{LOG_COLORS.get(log_level, '')}{record.levelname}{COLOR_CODES['RESET']}" return super().format(record) # Set up the root logger root_logger = logging.getLogger() root_logger.setLevel(logging.INFO) # Create a console handler and set the formatter ch = logging.StreamHandler() ch.setFormatter(ColoredFormatter('%(levelname)s: %(message)s')) # Add the console handler to the root logger root_logger.addHandler(ch) # Define log level functions debug = root_logger.debug info = root_logger.info warning = root_logger.warning error = root_logger.error critical = root_logger.critical