Spaces:
Paused
Paused
| """Logging configuration for MedGemma AI""" | |
| import logging | |
| import os | |
| import sys | |
| class ColoredFormatter(logging.Formatter): | |
| """Custom formatter with colors for different log levels""" | |
| # ANSI color codes | |
| COLORS = { | |
| 'DEBUG': '\033[36m', # Cyan | |
| 'INFO': '\033[32m', # Green | |
| 'WARNING': '\033[33m', # Yellow | |
| 'ERROR': '\033[31m', # Red | |
| 'CRITICAL': '\033[35m', # Magenta | |
| } | |
| RESET = '\033[0m' | |
| def format(self, record): | |
| # Add color to level name and pad for alignment | |
| if record.levelname in self.COLORS: | |
| # Pad level name to 8 characters for alignment (WARNING is longest at 7) | |
| padded_level = record.levelname.ljust(8) | |
| record.levelname = f"{self.COLORS[record.levelname]}{padded_level}{self.RESET}" | |
| return super().format(record) | |
| def setup_logger(name: str) -> logging.Logger: | |
| """Setup logger with consistent formatting and colors""" | |
| # Allow DEBUG mode via environment variable | |
| log_level = logging.DEBUG if os.getenv("DEBUG", "").lower() in ("1", "true", "yes") else logging.INFO | |
| # Create logger | |
| logger = logging.getLogger(name) | |
| logger.setLevel(log_level) | |
| # Avoid duplicate handlers | |
| if logger.handlers: | |
| return logger | |
| # Console handler with colors | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(log_level) | |
| # Use colored formatter for console | |
| formatter = ColoredFormatter( | |
| fmt='%(asctime)s | %(levelname)s | %(name)s | %(message)s', | |
| datefmt='%H:%M:%S' | |
| ) | |
| console_handler.setFormatter(formatter) | |
| logger.addHandler(console_handler) | |
| return logger |