Traffic-Control / utils /logger.py
Dhaerya's picture
Add files
b00d5d5
"""
Logging utilities — creates consistent console + file loggers.
"""
import logging
import sys
from pathlib import Path
def setup_logger(
name: str,
log_file: str | None = None,
level: int = logging.INFO,
) -> logging.Logger:
"""
Create (or retrieve) a named logger with console and optional file output.
Args:
name: Logger name (used to namespace messages).
log_file: If given, also write to this path.
level: Logging threshold (default INFO).
Returns:
Configured :class:`logging.Logger` instance.
"""
logger = logging.getLogger(name)
logger.setLevel(level)
# Avoid duplicate handlers when called multiple times
if logger.handlers:
return logger
fmt = logging.Formatter(
"%(asctime)s | %(name)s | %(levelname)s | %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
# Console handler
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(level)
ch.setFormatter(fmt)
logger.addHandler(ch)
# File handler (optional)
if log_file:
log_path = Path(log_file)
log_path.parent.mkdir(parents=True, exist_ok=True)
fh = logging.FileHandler(log_file, encoding="utf-8")
fh.setLevel(level)
fh.setFormatter(fmt)
logger.addHandler(fh)
return logger