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