from __future__ import annotations import logging from logging.handlers import RotatingFileHandler from pathlib import Path def configure_logging(root: Path) -> logging.Logger: log_dir = root / "logs" log_dir.mkdir(parents=True, exist_ok=True) logger = logging.getLogger("adam") logger.setLevel(logging.INFO) desired_log = str((log_dir / "adam.log").resolve()) existing_file = next( ( handler for handler in logger.handlers if isinstance(handler, RotatingFileHandler) and str(Path(handler.baseFilename).resolve()) == desired_log ), None, ) if existing_file is not None: return logger for handler in list(logger.handlers): logger.removeHandler(handler) handler.close() formatter = logging.Formatter( "%(asctime)s | %(levelname)-7s | %(name)s | %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) file_handler = RotatingFileHandler( log_dir / "adam.log", maxBytes=2_000_000, backupCount=3, encoding="utf-8", ) file_handler.setFormatter(formatter) logger.addHandler(file_handler) console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) logger.addHandler(console_handler) return logger