import os from typing import Any import warnings import logging logging_level = os.getenv("LOGGING_LEVEL", "INFO").upper() class RelativePathFormatter(logging.Formatter): def __init__( self, fmt: Any = None, datefmt: Any = None, remove_prefix: str | None = None ): super().__init__(fmt, datefmt) self.remove_prefix = remove_prefix or os.getcwd() # Ensure the prefix ends with a separator if not self.remove_prefix.endswith(os.sep): self.remove_prefix += os.sep def format(self, record: logging.LogRecord): # Make a copy of the record to avoid modifying the original record = logging.makeLogRecord(record.__dict__) # Remove the prefix from pathname if record.pathname.startswith(self.remove_prefix): record.pathname = record.pathname[len(self.remove_prefix) :] return super().format(record) def _setup_logging(level: Any = logging_level) -> logging.Logger: os.environ["TORCH_CPP_LOG_LEVEL"] = "ERROR" warnings.filterwarnings( "ignore", message="Overriding a previously registered kernel" ) warnings.filterwarnings("ignore", message="Warning only once for all operators") warnings.filterwarnings("ignore", message=".*Couldn't find ffmpeg or avconv.*") warnings.filterwarnings("ignore", message="'force_all_finite' was renamed to") warnings.filterwarnings("ignore", message="n_jobs value 1 overridden") warnings.filterwarnings("ignore", message=".*websocket.*is deprecated") numeric_level = getattr(logging, level.upper(), None) if not isinstance(numeric_level, int): raise ValueError(f"Invalid log level: {level}") # Create a custom formatter formatter = RelativePathFormatter( fmt="%(levelname)s - %(pathname)s:%(lineno)d - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) # Create a handler (e.g., StreamHandler for console output) handler = logging.StreamHandler() handler.setFormatter(formatter) # Configure root logger logging.basicConfig( level=numeric_level, handlers=[handler], # Use only your handler force=True, ) # Set levels for noisy loggers for noisy_logger in ( "uvicorn", "uvicorn.error", "uvicorn.access", "fastapi", "starlette", "httpx", ): logger = logging.getLogger(noisy_logger) logger.setLevel(logging.WARNING) logger.handlers = [] # Remove default handlers logger.addHandler(handler) # Add your custom handler logger = logging.getLogger(__name__) return logger logger = _setup_logging(level=logging_level) logger.debug(f"Logging initialized with level: {logging_level}")