|
|
""" |
|
|
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 |
|
|
""" |
|
|
|
|
|
logger.remove() |
|
|
|
|
|
|
|
|
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, |
|
|
) |
|
|
|
|
|
|
|
|
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) |
|
|
|