import logging, os from typing import Optional from dotenv import load_dotenv load_dotenv() def setup_logger( name: str, log_file: Optional[str] = None, level: int = logging.INFO ) -> Optional[logging.Logger]: """ Set up a logger with the specified name and level. Args: name: Logger name log_file: Path to log file (defaults to name.log) level: Logging level (defaults to INFO) Returns: Logger object if successful, None if setup fails """ try: if log_file is None: log_file = f"{name}.log" # Validate logging level valid_levels = [logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL] if level not in valid_levels: level = logging.INFO # Create a logger logger = logging.getLogger(name) logger.setLevel(level) logger.propagate = False # Clear existing handlers if logger.handlers: logger.handlers.clear() # Create file handler file_handler = logging.FileHandler(log_file) file_handler.setLevel(level) # Create console handler console_handler = logging.StreamHandler() console_handler.setLevel(level) # Create a formatter and set it for both handlers formatter = logging.Formatter( '%(asctime)s.%(msecs)03d - %(name)s - [%(levelname)s] %(message)s', datefmt="%Y-%m-%d %H:%M:%S" ) file_handler.setFormatter(formatter) console_handler.setFormatter(formatter) # Add handlers to the logger logger.addHandler(file_handler) logger.addHandler(console_handler) return logger except Exception as e: print(f"Failed to setup logger: {e}") return None logger = setup_logger('on_screen_translator', log_file='translate.log', level=logging.DEBUG)