SmokeScan / config /logging.py
KinetoLabs's picture
Fix critical model implementations and add sample scenarios
f3ebc82
"""Centralized logging configuration for FDAM AI Pipeline.
Provides structured logging for HuggingFace Spaces troubleshooting.
Set LOG_LEVEL=DEBUG for detailed output.
"""
import logging
import sys
from typing import Literal
LogLevel = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
def setup_logging(level: LogLevel = "INFO") -> None:
"""Configure structured logging for FDAM Pipeline.
Args:
level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL).
DEBUG provides detailed inference timing and RAG scores.
INFO provides pipeline stage progress.
WARNING and above for production.
"""
log_format = "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
date_format = "%Y-%m-%d %H:%M:%S"
# Configure root logger
logging.basicConfig(
level=getattr(logging, level.upper(), logging.INFO),
format=log_format,
datefmt=date_format,
handlers=[logging.StreamHandler(sys.stdout)],
force=True, # Override any existing config
)
# Reduce noise from third-party libraries
logging.getLogger("chromadb").setLevel(logging.WARNING)
logging.getLogger("transformers").setLevel(logging.WARNING)
logging.getLogger("gradio").setLevel(logging.WARNING)
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("httpcore").setLevel(logging.WARNING)
logging.getLogger("urllib3").setLevel(logging.WARNING)
logging.getLogger("PIL").setLevel(logging.WARNING)
# Log the logging configuration itself
logger = logging.getLogger(__name__)
logger.info(f"Logging initialized at {level} level")
def get_logger(name: str) -> logging.Logger:
"""Get a logger with the given name.
Convenience function for consistent logger creation.
Args:
name: Logger name (typically __name__ of the calling module).
Returns:
Configured logger instance.
"""
return logging.getLogger(name)