SPARKNET / src /utils /logging.py
MHamdan's picture
Initial commit: SPARKNET framework
a9dc537
"""
Logging configuration for SPARKNET
Provides structured logging with multiple outputs
"""
import sys
from pathlib import Path
from loguru import logger
from typing import Optional
def setup_logging(
log_level: str = "INFO",
log_file: Optional[str] = None,
rotation: str = "100 MB",
retention: str = "7 days",
colorize: bool = True,
):
"""
Configure logging for SPARKNET.
Args:
log_level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
log_file: Path to log file or None for no file logging
rotation: Log rotation size
retention: Log retention period
colorize: Enable colored output
"""
# Remove default logger
logger.remove()
# Add console handler
logger.add(
sys.stderr,
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
level=log_level,
colorize=colorize,
)
# Add file handler if specified
if log_file:
log_path = Path(log_file)
log_path.parent.mkdir(parents=True, exist_ok=True)
logger.add(
log_file,
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
level=log_level,
rotation=rotation,
retention=retention,
compression="zip",
)
logger.info(f"Logging to file: {log_file}")
logger.info(f"Logging initialized at {log_level} level")
def get_logger(name: str):
"""
Get a logger instance for a specific module.
Args:
name: Module name
Returns:
Logger instance
"""
return logger.bind(name=name)