""" Logging Utility Configures logging for the application. """ import logging import os from datetime import datetime def setup_logger(name: str = 'AzureKeyVaultManager', log_file: str = None, level=logging.INFO): """ Set up and configure a logger. Args: name: Logger name log_file: Optional log file path (defaults to logs/app_{date}.log) level: Logging level (default: INFO) Returns: logging.Logger: Configured logger instance """ logger = logging.getLogger(name) logger.setLevel(level) # Remove existing handlers logger.handlers = [] # Create formatter formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # Console handler console_handler = logging.StreamHandler() console_handler.setLevel(level) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File handler (optional) if log_file: # Create logs directory if it doesn't exist log_dir = os.path.dirname(log_file) if log_dir and not os.path.exists(log_dir): os.makedirs(log_dir) file_handler = logging.FileHandler(log_file) file_handler.setLevel(level) file_handler.setFormatter(formatter) logger.addHandler(file_handler) else: # Default log file in logs directory log_dir = 'logs' if not os.path.exists(log_dir): os.makedirs(log_dir) log_file = os.path.join(log_dir, f'app_{datetime.now().strftime("%Y%m%d")}.log') file_handler = logging.FileHandler(log_file) file_handler.setLevel(level) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger # Create default logger instance logger = setup_logger()