import logging import os import sys from datetime import datetime def setup_logger(name="ankigen", log_level=logging.INFO): """Set up and return a logger with file and console handlers""" # Create logger logger = logging.getLogger(name) logger.setLevel(log_level) # Remove existing handlers if any # This ensures that if setup_logger is called multiple times for the same logger name, # it doesn't accumulate handlers. if logger.hasHandlers(): logger.handlers.clear() # Create formatter formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s" ) # Create console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # Create file handler # Logs will be stored in ~/.ankigen/logs/ # A new log file is created each day (e.g., ankigen_20231027.log) log_dir = os.path.join(os.path.expanduser("~"), ".ankigen", "logs") os.makedirs(log_dir, exist_ok=True) timestamp = datetime.now().strftime("%Y%m%d") log_file = os.path.join(log_dir, f"{name}_{timestamp}.log") file_handler = logging.FileHandler(log_file) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger # Create a default logger instance for easy import and use. # Projects can also create their own named loggers using setup_logger(name="my_module_logger") logger = setup_logger()