| | """ |
| | 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) |
| |
|