warp2api / warp2protobuf /core /logging.py
baohuixiao's picture
Upload 116 files
8c4d9ff 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 pathlib import Path
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"""
log_dir = Path(LOGS_DIR)
file_handler = None
try:
log_dir.mkdir(parents=True, exist_ok=True)
backup_existing_log()
file_handler = RotatingFileHandler(
log_dir / 'warp_api.log',
maxBytes=10*1024*1024,
backupCount=5,
encoding='utf-8'
)
file_handler.setLevel(logging.DEBUG)
except Exception as e:
print(f"Warning: Cannot use log directory {log_dir}: {e}")
logger = logging.getLogger('warp_api')
logger.setLevel(logging.DEBUG)
for handler in logger.handlers[:]:
logger.removeHandler(handler)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s'
)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
if file_handler is not None:
file_handler.setFormatter(formatter)
logger.addHandler(file_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