import logging import sys from loguru import logger as guru_logger def register_logger(): print("📢 Setting up logging interception...") # 🔴 **Ensure Uvicorn Logs Are Captured** intercept_loggers = ["uvicorn", "uvicorn.access", "uvicorn.error", "fastapi"] class InterceptHandler(logging.Handler): def emit(self, record): level = ( guru_logger.level(record.levelname).name if guru_logger.level(record.levelname, None) else record.levelno ) frame, depth = logging.currentframe(), 2 while frame.f_code.co_filename == logging.__file__: frame = frame.f_back depth += 1 guru_logger.opt(depth=depth, exception=record.exc_info).log( level, f"[{record.name}] {record.getMessage()}", ) # 🔴 **Replace Existing Loggers with Interception** logging.root.handlers.clear() logging.root.setLevel(logging.INFO) logging.root.handlers = [InterceptHandler()] for logger_name in intercept_loggers: logging_logger = logging.getLogger(logger_name) logging_logger.handlers.clear() # Remove Uvicorn default handlers logging_logger.propagate = True # ✅ Ensure they propagate through Loguru # 🔴 **Redirect stdout/stderr to Loguru (Keep Green Timestamps)** guru_logger.remove() guru_logger.add( sys.stdout, level="INFO", format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {message}", ) print("✅ Logging interception complete. Logs are formatted and deduplicated!")