""" Logging configuration for the AI Chatbot application Configures error handling and logging infrastructure as required by the project """ import logging import sys from datetime import datetime from pathlib import Path def setup_logging(log_level=logging.INFO, log_format=None): """ Configure logging infrastructure for the application """ if log_format is None: log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' # Create logs directory if it doesn't exist logs_dir = Path("logs") logs_dir.mkdir(exist_ok=True) # Configure root logger root_logger = logging.getLogger() root_logger.setLevel(log_level) # Clear any existing handlers root_logger.handlers.clear() # Console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(log_level) console_formatter = logging.Formatter(log_format) console_handler.setFormatter(console_formatter) # File handler for general logs general_log_file = logs_dir / f"app_{datetime.now().strftime('%Y%m%d')}.log" file_handler = logging.FileHandler(general_log_file) file_handler.setLevel(log_level) file_formatter = logging.Formatter(log_format) file_handler.setFormatter(file_formatter) # Add handlers to root logger root_logger.addHandler(console_handler) root_logger.addHandler(file_handler) # Also set specific loggers to appropriate levels logging.getLogger("uvicorn").setLevel(logging.WARNING) logging.getLogger("fastapi").setLevel(log_level) logging.getLogger("sqlalchemy").setLevel(logging.WARNING) def get_logger(name: str) -> logging.Logger: """ Get a logger with the specified name """ return logging.getLogger(name) # Initialize logging when module is imported setup_logging() # Example usage: # logger = get_logger(__name__) # logger.info("Application started") # logger.error("An error occurred")