#!/usr/bin/env python3 """ Test logging utilities for GAIA test system """ import logging import os import sys from contextlib import contextmanager from datetime import datetime from pathlib import Path @contextmanager def test_logger(test_type: str, test_id: str = None): """ Context manager for test logging Args: test_type: Type of test being run test_id: Optional test identifier """ # Create log directory if it doesn't exist log_dir = Path("test_logs") log_dir.mkdir(exist_ok=True) # Generate log filename timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") if test_id: log_file = log_dir / f"{test_type}_{test_id}_{timestamp}.log" else: log_file = log_dir / f"{test_type}_{timestamp}.log" # Setup logger logger = logging.getLogger(f"test_{test_type}") logger.setLevel(logging.INFO) # Clear existing handlers logger.handlers.clear() # File handler file_handler = logging.FileHandler(log_file) file_handler.setLevel(logging.INFO) # Console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) # Formatter formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) file_handler.setFormatter(formatter) console_handler.setFormatter(formatter) # Add handlers logger.addHandler(file_handler) logger.addHandler(console_handler) try: logger.info(f"Starting {test_type} test" + (f" for {test_id}" if test_id else "")) yield logger logger.info(f"Completed {test_type} test" + (f" for {test_id}" if test_id else "")) except Exception as e: logger.error(f"Test failed: {e}") raise finally: # Clean up handlers logger.handlers.clear() def setup_test_logging(): """Setup basic test logging configuration""" logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.StreamHandler(sys.stdout) ] ) if __name__ == "__main__": # Test the logging utility with test_logger("sample", "test123") as logger: logger.info("This is a test log message") logger.warning("This is a warning") logger.error("This is an error")