Markit_v2 / src /core /logging_config.py
AnseMin's picture
Refactor and enhance application structure for Markit_v2
a773878
Raw History Blame Contribute Delete
2.55 kB
"""
Centralized logging configuration for the Markit application.
"""
import logging
import sys
from pathlib import Path
from typing import Optional
from src.core.config import config
def setup_logging(
level: Optional[str] = None,
log_file: Optional[str] = None,
format_string: Optional[str] = None
) -> None:
"""
Setup centralized logging configuration.
Args:
level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
log_file: Optional file path for logging output
format_string: Custom format string for log messages
"""
# Determine logging level
if level is None:
level = "DEBUG" if config.app.debug else "INFO"
# Default format string
if format_string is None:
format_string = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# Configure root logger
root_logger = logging.getLogger()
root_logger.setLevel(getattr(logging, level.upper()))
# Clear existing handlers
root_logger.handlers.clear()
# Create formatter
formatter = logging.Formatter(format_string)
# Console handler
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(getattr(logging, level.upper()))
console_handler.setFormatter(formatter)
root_logger.addHandler(console_handler)
# File handler (optional)
if log_file:
try:
log_path = Path(log_file)
log_path.parent.mkdir(parents=True, exist_ok=True)
file_handler = logging.FileHandler(log_file)
file_handler.setLevel(getattr(logging, level.upper()))
file_handler.setFormatter(formatter)
root_logger.addHandler(file_handler)
except Exception as e:
logging.warning(f"Could not setup file logging: {e}")
# Set specific logger levels to reduce noise
logging.getLogger("urllib3").setLevel(logging.WARNING)
logging.getLogger("requests").setLevel(logging.WARNING)
logging.getLogger("gradio").setLevel(logging.WARNING)
if not config.app.debug:
# Reduce noise from external libraries in non-debug mode
logging.getLogger("transformers").setLevel(logging.WARNING)
logging.getLogger("torch").setLevel(logging.WARNING)
def get_logger(name: str) -> logging.Logger:
"""
Get a logger with the specified name.
Args:
name: Logger name (typically __name__)
Returns:
Logger instance
"""
return logging.getLogger(name)