Spaces:
Paused
Paused
| import logging | |
| import sys | |
| import time | |
| from typing import Optional | |
| from functools import wraps | |
| def setup_logging(level: str = "INFO", log_file: Optional[str] = None): | |
| """Setup logging configuration for A2A agents.""" | |
| formatter = logging.Formatter( | |
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s' | |
| ) | |
| # Console handler | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setFormatter(formatter) | |
| # Root logger | |
| logger = logging.getLogger() | |
| logger.setLevel(getattr(logging, level.upper())) | |
| logger.addHandler(console_handler) | |
| # File handler if specified | |
| if log_file: | |
| file_handler = logging.FileHandler(log_file) | |
| file_handler.setFormatter(formatter) | |
| logger.addHandler(file_handler) | |
| return logger | |
| def log_performance(func): | |
| """Decorator to log function performance.""" | |
| async def wrapper(*args, **kwargs): | |
| logger = logging.getLogger(func.__module__) | |
| start_time = time.time() | |
| logger.info(f"Starting {func.__name__}") | |
| try: | |
| result = await func(*args, **kwargs) | |
| duration = time.time() - start_time | |
| logger.info(f"Completed {func.__name__} in {duration:.2f}s") | |
| return result | |
| except Exception as e: | |
| duration = time.time() - start_time | |
| logger.error(f"Failed {func.__name__} after {duration:.2f}s: {e}") | |
| raise | |
| return wrapper |