import logging from logging.handlers import RotatingFileHandler import os def setup_logger( name: str = "dronebot_logger", log_file: str = "logs/app.log", level: int = logging.DEBUG, max_bytes: int = 5 * 1024 * 1024, # 5 MB backup_count: int = 3 ) -> logging.Logger: """ Set up a logger that logs to both console and file. Args: name (str): Logger name log_file (str): Path to log file level (int): Logging level (e.g., logging.INFO, logging.DEBUG) max_bytes (int): Max size of each log file before rotation backup_count (int): Number of rotated logs to keep Returns: logging.Logger: Configured logger instance """ # Ensure log directory exists os.makedirs(os.path.dirname(log_file), exist_ok=True) # Create logger logger = logging.getLogger(name) logger.setLevel(level) logger.propagate = False # Avoid double logging if not logger.handlers: # Formatter formatter = logging.Formatter( "[%(asctime)s] %(levelname)s — %(name)s — %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) # Console handler console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) logger.addHandler(console_handler) # Rotating file handler file_handler = RotatingFileHandler( log_file, maxBytes=max_bytes, backupCount=backup_count ) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger logger = setup_logger()