import logging import os import sys from logging.handlers import RotatingFileHandler # Ensure log directory exists log_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "logs") os.makedirs(log_dir, exist_ok=True) # Define the log file path log_file = os.path.join(log_dir, "rag_app.log") # Configure logging def setup_logging(level=logging.INFO): """ Setup logging configuration Args: level: The logging level """ # Create formatters file_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) console_formatter = logging.Formatter( '%(asctime)s - %(levelname)s - %(message)s', datefmt='%H:%M:%S' ) # Create handlers # File handler with rotation (10 MB per file, keep 5 backup files) file_handler = RotatingFileHandler( log_file, maxBytes=10*1024*1024, # 10 MB backupCount=5 ) file_handler.setLevel(level) file_handler.setFormatter(file_formatter) # Console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(level) console_handler.setFormatter(console_formatter) # Configure root logger root_logger = logging.getLogger() root_logger.setLevel(level) # Remove existing handlers if any for handler in root_logger.handlers[:]: root_logger.removeHandler(handler) # Add the handlers root_logger.addHandler(file_handler) root_logger.addHandler(console_handler) # Set specific levels for third-party modules logging.getLogger("uvicorn").setLevel(logging.WARNING) logging.getLogger("uvicorn.access").setLevel(logging.WARNING) logging.getLogger("httpx").setLevel(logging.WARNING) # Create logger for this module logger = logging.getLogger(__name__) logger.info(f"Logging initialized. Log file: {log_file}") return logger