""" Logging configuration for the detection demo application. Provides centralized logging setup with proper formatting and levels. """ import logging import sys class LoggerManager: """Singleton logger manager for the application.""" _instance = None _initialized = False def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self): if not self._initialized: self._setup_default_logging() self._initialized = True def _setup_default_logging(self): """Setup default logging configuration.""" # Create main logger self.logger = logging.getLogger() self.logger.setLevel(logging.INFO) # Prevent duplicate handlers if self.logger.handlers: return # Console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) console_formatter = logging.Formatter( fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%H:%M:%S", ) console_handler.setFormatter(console_formatter) self.logger.addHandler(console_handler) def get_logger(self, name: str = None) -> logging.Logger: """Get a logger instance.""" if name: return logging.getLogger(name) return self.logger # Global logger manager instance _logger_manager = LoggerManager() def get_logger(name: str = None) -> logging.Logger: """ Get a logger instance for the application. Args: name: Optional module name (will be prefixed with app name) Returns: Logger instance """ return _logger_manager.get_logger(name) # Module-level logger logger = get_logger(__name__)