import logging import logging.handlers import os from pathlib import Path def setup_logging(log_level=logging.INFO, log_dir="logs"): """ Configure logging with both console and file handlers. Args: log_level: logging level (default: logging.INFO) log_dir: directory to store log files """ # Create logs directory if it doesn't exist Path(log_dir).mkdir(exist_ok=True) # Get root logger logger = logging.getLogger() logger.setLevel(log_level) # Clear existing handlers logger.handlers.clear() # Create formatter formatter = logging.Formatter( fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # Console handler console_handler = logging.StreamHandler() console_handler.setLevel(log_level) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File handler (rotating) log_file = os.path.join(log_dir, 'app.log') file_handler = logging.handlers.RotatingFileHandler( log_file, maxBytes=10 * 1024 * 1024, # 10MB backupCount=5 ) file_handler.setLevel(log_level) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger def get_logger(name): """Get a logger instance for a specific module.""" return logging.getLogger(name)