File size: 1,327 Bytes
e0265b9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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
|