youbiaokachi's picture
Upload 46 files
c1ae554 verified
#!/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