stevelohwc's picture
hfspace: add backend API runtime bundle for Space deployment
0ba6002
"""
Logging configuration for the project
"""
import logging
import sys
from pathlib import Path
from typing import Optional
from .config import config
def setup_logging(
log_level: Optional[str] = None,
log_file: Optional[Path] = None,
log_to_console: bool = True,
) -> None:
"""
Set up logging configuration for the entire application
Args:
log_level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
log_file: Path to log file. If None, uses config.LOG_FILE
log_to_console: Whether to also log to console
"""
if log_level is None:
log_level = config.LOG_LEVEL
if log_file is None:
log_file = config.LOG_FILE
# Convert string log level to logging constant
numeric_level = getattr(logging, log_level.upper(), logging.INFO)
# Create formatter
formatter = logging.Formatter(config.LOG_FORMAT)
# Get root logger
root_logger = logging.getLogger()
root_logger.setLevel(numeric_level)
# Remove existing handlers to avoid duplicates
root_logger.handlers = []
# File handler
file_handler = logging.FileHandler(log_file)
file_handler.setLevel(numeric_level)
file_handler.setFormatter(formatter)
root_logger.addHandler(file_handler)
# Console handler (optional)
if log_to_console:
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(numeric_level)
console_handler.setFormatter(formatter)
root_logger.addHandler(console_handler)
def get_logger(name: str) -> logging.Logger:
"""
Get a logger instance with the specified name
Args:
name: Name of the logger (typically __name__ of the module)
Returns:
Logger instance configured with the application settings
"""
return logging.getLogger(name)