File size: 3,322 Bytes
c1ae554
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""

Logging system for Warp API server



Provides comprehensive logging with file rotation and console output.

"""
import logging
import os
import shutil
from datetime import datetime
from logging.handlers import RotatingFileHandler
from ..config.settings import LOGS_DIR


def backup_existing_log():
    """Backup existing log file with timestamp"""
    log_file = LOGS_DIR / 'warp_api.log'

    if log_file.exists():
        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
        backup_name = f'warp_api_{timestamp}.log'
        backup_path = LOGS_DIR / backup_name

        try:
            shutil.move(str(log_file), str(backup_path))
            print(f"Previous log backed up as: {backup_name}")
        except Exception as e:
            print(f"Warning: Could not backup log file: {e}")


def setup_logging():
    """Configure comprehensive logging system"""
    LOGS_DIR.mkdir(exist_ok=True)

    backup_existing_log()
    
    logger = logging.getLogger('warp_api')
    logger.setLevel(logging.DEBUG)
    
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)
    
    file_handler = RotatingFileHandler(
        LOGS_DIR / 'warp_api.log',
        maxBytes=10*1024*1024,
        backupCount=5,
        encoding='utf-8'
    )
    file_handler.setLevel(logging.DEBUG)
    
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s'
    )
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)
    
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    
    return logger


# Initialize logger
logger = setup_logging()


def log(*a): 
    """Legacy log function for backward compatibility"""
    logger.info(" ".join(str(x) for x in a))


def set_log_file(log_file_name: str) -> None:
    """Reconfigure the global logger to write to a specific log file."""
    try:
        LOGS_DIR.mkdir(exist_ok=True)
    except Exception:
        pass

    global logger
    target_logger = logging.getLogger('warp_api')

    for handler in target_logger.handlers[:]:
        try:
            target_logger.removeHandler(handler)
            try:
                handler.close()
            except Exception:
                pass
        except Exception:
            pass

    file_handler = RotatingFileHandler(
        LOGS_DIR / log_file_name,
        maxBytes=10*1024*1024,
        backupCount=5,
        encoding='utf-8'
    )
    file_handler.setLevel(logging.DEBUG)

    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)

    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s'
    )
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    target_logger.addHandler(file_handler)
    target_logger.addHandler(console_handler)

    logger = target_logger

    try:
        logger.info(f"Logging redirected to: {LOGS_DIR / log_file_name}")
    except Exception:
        pass