MultiCountryRAG / utils /logger.py
SAAHMATHWORKS
Initial deployment: Legal Assistant application
fbdfc24
import logging
import sys
from datetime import datetime
from typing import Dict, Any
def setup_logging(level=logging.INFO):
"""Setup comprehensive logging configuration"""
# Create formatter
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# Console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(level)
console_handler.setFormatter(formatter)
# File handler
file_handler = logging.FileHandler(f'legal_rag_{datetime.now().strftime("%Y%m%d")}.log')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
# Configure root logger
logging.basicConfig(
level=level,
handlers=[console_handler, file_handler],
force=True
)
# Specific logger configurations
legal_logger = logging.getLogger('legal_rag')
legal_logger.setLevel(logging.DEBUG)
mongodb_logger = logging.getLogger('pymongo')
mongodb_logger.setLevel(logging.WARNING)
print("✅ Logging setup completed")
class PerformanceLogger:
"""Logger for performance monitoring"""
def __init__(self):
self.metrics = {
"query_times": [],
"routing_times": [],
"retrieval_times": [],
"generation_times": []
}
def log_query_time(self, session_id: str, duration: float):
"""Log query processing time"""
self.metrics["query_times"].append({
"session_id": session_id,
"duration": duration,
"timestamp": datetime.now()
})
logging.info(f"Query processed in {duration:.2f}s for session {session_id}")
def log_routing_decision(self, session_id: str, decision: str, confidence: str, method: str):
"""Log routing decisions"""
logging.debug(f"Routing: session={session_id}, decision={decision}, confidence={confidence}, method={method}")
def get_performance_report(self) -> Dict[str, Any]:
"""Generate performance report"""
query_times = [m["duration"] for m in self.metrics["query_times"]]
return {
"total_queries": len(query_times),
"average_query_time": sum(query_times) / len(query_times) if query_times else 0,
"max_query_time": max(query_times) if query_times else 0,
"min_query_time": min(query_times) if query_times else 0
}