Final_Assignment / tests /test_logging_utils.py
GAIA Developer
🧪 Add comprehensive test infrastructure and async testing system
c262d1a
#!/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")