SyntheticMDProductions's picture
Some of Adams structure
e0265b9 verified
Raw
History Blame Contribute Delete
1.33 kB
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