import logging import logging.handlers import os from datetime import datetime from pathlib import Path # Create logs directory if it doesn't exist LOGS_DIR = Path("logs") LOGS_DIR.mkdir(exist_ok=True) # Create formatters CONSOLE_FORMAT = '%(levelname)s: %(message)s' FILE_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' def setup_logger(name: str) -> logging.Logger: """ Set up a logger with both file and console handlers Args: name: The name of the logger (usually __name__) Returns: logging.Logger: Configured logger instance """ logger = logging.getLogger(name) logger.setLevel(logging.INFO) # Prevent adding handlers multiple times if logger.handlers: return logger # Console handler console_handler = logging.StreamHandler() console_handler.setLevel(logging.WARNING) console_handler.setFormatter(logging.Formatter(CONSOLE_FORMAT)) # File handler log_file = LOGS_DIR / f"{datetime.now().strftime('%Y-%m')}.log" file_handler = logging.handlers.RotatingFileHandler( log_file, maxBytes=10*1024*1024, # 10MB backupCount=5, encoding='utf-8' ) file_handler.setLevel(logging.INFO) file_handler.setFormatter(logging.Formatter(FILE_FORMAT)) # Add handlers logger.addHandler(console_handler) logger.addHandler(file_handler) return logger