Spaces:
Sleeping
Sleeping
| """ | |
| Logging configuration for UAP Data Analysis Tool | |
| Provides consistent logging setup across all modules | |
| """ | |
| import logging | |
| import sys | |
| from datetime import datetime | |
| import os | |
| def setup_logging( | |
| log_level: str = "INFO", | |
| log_file: str = None, | |
| log_format: str = None | |
| ) -> logging.Logger: | |
| """ | |
| Set up logging configuration for the application | |
| Args: | |
| log_level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | |
| log_file: Optional log file path | |
| log_format: Custom log format string | |
| Returns: | |
| Configured logger instance | |
| """ | |
| # Default format if not provided | |
| if log_format is None: | |
| log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' | |
| # Create logs directory if logging to file | |
| if log_file: | |
| os.makedirs(os.path.dirname(log_file), exist_ok=True) | |
| # Configure root logger | |
| logging.basicConfig( | |
| level=getattr(logging, log_level.upper()), | |
| format=log_format, | |
| handlers=[ | |
| logging.StreamHandler(sys.stdout), | |
| logging.FileHandler(log_file) if log_file else logging.NullHandler() | |
| ] | |
| ) | |
| # Set specific loggers to WARNING to reduce noise | |
| logging.getLogger('matplotlib').setLevel(logging.WARNING) | |
| logging.getLogger('PIL').setLevel(logging.WARNING) | |
| logging.getLogger('urllib3').setLevel(logging.WARNING) | |
| logger = logging.getLogger('UAP_Analytics') | |
| logger.info(f"Logging initialized at {log_level} level") | |
| return logger | |
| # Performance logging decorator | |
| def log_performance(func): | |
| """Decorator to log function execution time""" | |
| import functools | |
| import time | |
| def wrapper(*args, **kwargs): | |
| logger = logging.getLogger(func.__module__) | |
| start_time = time.time() | |
| try: | |
| result = func(*args, **kwargs) | |
| execution_time = time.time() - start_time | |
| logger.info(f"{func.__name__} completed in {execution_time:.2f}s") | |
| return result | |
| except Exception as e: | |
| execution_time = time.time() - start_time | |
| logger.error(f"{func.__name__} failed after {execution_time:.2f}s: {e}") | |
| raise | |
| return wrapper | |
| # Error logging decorator | |
| def log_errors(func): | |
| """Decorator to log function errors""" | |
| import functools | |
| def wrapper(*args, **kwargs): | |
| logger = logging.getLogger(func.__module__) | |
| try: | |
| return func(*args, **kwargs) | |
| except Exception as e: | |
| logger.error(f"Error in {func.__name__}: {e}", exc_info=True) | |
| raise | |
| return wrapper | |
| # Initialize default logger | |
| default_logger = setup_logging( | |
| log_level=os.getenv('LOG_LEVEL', 'INFO'), | |
| log_file=os.getenv('LOG_FILE', None) | |
| ) |