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