import logging import sys from typing import Optional def setup_logging(level: str = "INFO", logger_name: Optional[str] = None) -> logging.Logger: """ Set up centralized logging configuration Args: level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) logger_name: Name for the logger, if None uses root logger Returns: Configured logger instance """ # Create logger logger = logging.getLogger(logger_name) if logger_name else logging.getLogger() # Avoid duplicate handlers if logger.handlers: return logger # Set level logger.setLevel(getattr(logging, level.upper(), logging.INFO)) # Create console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(getattr(logging, level.upper(), logging.INFO)) # Create formatter formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) console_handler.setFormatter(formatter) # Add handler to logger logger.addHandler(console_handler) return logger # Configure the root logger for the application def configure_app_logging(): """Configure application-wide logging""" logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # Create application logger app_logger = logging.getLogger(__name__) app_logger.info("Application logging configured") return app_logger