| """ |
| Logging utilities for CompI project. |
| """ |
|
|
| import logging |
| import sys |
| from pathlib import Path |
| from src.config import LOG_LEVEL, LOG_FORMAT, PROJECT_ROOT |
|
|
| def setup_logger(name: str, log_file: str = None) -> logging.Logger: |
| """ |
| Set up a logger with console and optional file output. |
| |
| Args: |
| name: Logger name |
| log_file: Optional log file path |
| |
| Returns: |
| Configured logger instance |
| """ |
| logger = logging.getLogger(name) |
| logger.setLevel(getattr(logging, LOG_LEVEL.upper())) |
| |
| |
| logger.handlers.clear() |
| |
| |
| console_handler = logging.StreamHandler(sys.stdout) |
| console_handler.setLevel(logging.INFO) |
| console_formatter = logging.Formatter(LOG_FORMAT) |
| console_handler.setFormatter(console_formatter) |
| logger.addHandler(console_handler) |
| |
| |
| if log_file: |
| log_path = PROJECT_ROOT / "logs" |
| log_path.mkdir(exist_ok=True) |
| |
| file_handler = logging.FileHandler(log_path / log_file) |
| file_handler.setLevel(logging.DEBUG) |
| file_formatter = logging.Formatter(LOG_FORMAT) |
| file_handler.setFormatter(file_formatter) |
| logger.addHandler(file_handler) |
| |
| return logger |
|
|