""" Logging Configuration Module Sets up application-wide logging with: - Rotating file handler (5MB max, 3 backups) at DEBUG level - Console handler at INFO level - Consistent formatting for both handlers """ import logging import os from logging.handlers import RotatingFileHandler from pathlib import Path def setup_logging(log_dir: str = "logs", log_file: str = "pterodisbot.log") -> logging.Logger: """ Configure application-wide logging. Args: log_dir: Directory for log files (relative to this file) log_file: Name of the log file Returns: Configured logger instance """ # Create logs directory if it doesn't exist logs_path = Path(__file__).parent / log_dir logs_path.mkdir(parents=True, exist_ok=True) # Get or create the application logger logger = logging.getLogger("pterodisbot") logger.setLevel(logging.DEBUG) # Avoid adding duplicate handlers if called multiple times if logger.handlers: return logger # File handler for logs (rotates when reaching 5MB, keeps 3 backups) file_handler = RotatingFileHandler( filename=logs_path / log_file, maxBytes=5 * 1024 * 1024, # 5 MiB max log file size backupCount=3, # Rotate through 3 files encoding="utf-8", ) file_handler.setLevel(logging.DEBUG) file_handler.setFormatter( logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") ) logger.addHandler(file_handler) # Console handler for real-time output (INFO level and above) console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter( logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") ) logger.addHandler(console_handler) logger.info("Initialized logging system with file and console output") return logger def get_logger() -> logging.Logger: """Get the configured logger instance.""" return logging.getLogger("pterodisbot")