import logging import sys import colorlog def setup_logger(name: str) -> logging.Logger: """ Set up a logger with colored output for console if running in a terminal. Args: name (str): Name of the logger. Returns: logging.Logger: Configured logger instance. """ # Check if the output is a terminal to enable colored output use_colors = sys.stdout.isatty() # Create a stream handler handler = colorlog.StreamHandler() if use_colors: # Use colored formatter for terminal output handler.setFormatter( colorlog.ColoredFormatter( "%(asctime)s - %(log_color)s%(levelname)s%(reset)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", log_colors={ "DEBUG": "cyan", "INFO": "green", "WARNING": "yellow", "ERROR": "red", "CRITICAL": "bold_red", }, ) ) else: # Use standard formatter when not in a terminal handler.setFormatter( logging.Formatter( "%(asctime)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) ) # Configure the logger logger = logging.getLogger(name) logger.addHandler(handler) logger.setLevel(logging.INFO) logger.propagate = False return logger