import logging def setup_logger(name: str) -> logging.Logger: """ Set up and return a logger with the specified name. """ logger = logging.getLogger(name) if not logger.handlers: logger.setLevel(logging.INFO) # Set to INFO to avoid DEBUG logs in production formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # Console handler console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File handler for errors (optional) # Uncomment the following lines to enable error logging to a file # error_file_handler = logging.FileHandler('error.log') # error_file_handler.setFormatter(formatter) # error_file_handler.setLevel(logging.ERROR) # logger.addHandler(error_file_handler) return logger def log_info(logger: logging.Logger, message: str) -> None: """ Log an informational message. """ logger.info(message) def log_error(logger: logging.Logger, message: str) -> None: """ Log an error message. """ logger.error(message) def log_debug(logger: logging.Logger, message: str) -> None: """ Log a debug message. """ logger.debug(message) def log_warning(logger: logging.Logger, message: str) -> None: """ Log a warning message. """ logger.warning(message)