"""Logging configuration for Jana MCP Server."""
import logging
import sys
from typing import Literal
LogLevel = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
def setup_logging(level: str = "INFO") -> logging.Logger:
"""
Configure logging for the application.
Args:
level: Logging level string (DEBUG, INFO, WARNING, ERROR, CRITICAL)
Returns:
Configured root logger
"""
# Validate and convert level
level_upper = level.upper()
numeric_level = getattr(logging, level_upper, logging.INFO)
# Create formatter
formatter = logging.Formatter(
fmt="%(asctime)s | %(levelname)-8s | %(name)s | %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
# Configure root logger
root_logger = logging.getLogger()
root_logger.setLevel(numeric_level)
# Remove existing handlers
root_logger.handlers.clear()
# Add console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(numeric_level)
console_handler.setFormatter(formatter)
root_logger.addHandler(console_handler)
# Reduce noise from third-party libraries
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("httpcore").setLevel(logging.WARNING)
logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
# Get application logger
logger = logging.getLogger("jana_mcp")
logger.info("Logging configured at %s level", level_upper)
return logger