Spaces:
Running
Running

Refactor logging setup in app.py and blob_utils.py to use module-level loggers for better context and remove redundant file handler configuration in logging_config.py.
1709520
""" | |
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__) | |