Quick-Understand / api /logging_config.py
mafzaal's picture
Add logging configuration and integrate logging into API endpoints
57e7c3d
import logging
import os
import sys
from logging.handlers import RotatingFileHandler
# Ensure log directory exists
log_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "logs")
os.makedirs(log_dir, exist_ok=True)
# Define the log file path
log_file = os.path.join(log_dir, "rag_app.log")
# Configure logging
def setup_logging(level=logging.INFO):
"""
Setup logging configuration
Args:
level: The logging level
"""
# Create formatters
file_formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
console_formatter = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s',
datefmt='%H:%M:%S'
)
# Create handlers
# File handler with rotation (10 MB per file, keep 5 backup files)
file_handler = RotatingFileHandler(
log_file,
maxBytes=10*1024*1024, # 10 MB
backupCount=5
)
file_handler.setLevel(level)
file_handler.setFormatter(file_formatter)
# Console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(level)
console_handler.setFormatter(console_formatter)
# Configure root logger
root_logger = logging.getLogger()
root_logger.setLevel(level)
# Remove existing handlers if any
for handler in root_logger.handlers[:]:
root_logger.removeHandler(handler)
# Add the handlers
root_logger.addHandler(file_handler)
root_logger.addHandler(console_handler)
# Set specific levels for third-party modules
logging.getLogger("uvicorn").setLevel(logging.WARNING)
logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
logging.getLogger("httpx").setLevel(logging.WARNING)
# Create logger for this module
logger = logging.getLogger(__name__)
logger.info(f"Logging initialized. Log file: {log_file}")
return logger