File size: 2,411 Bytes
c262d1a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/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")