logging_setup.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. """日志初始化工具。"""
  2. from __future__ import annotations
  3. import logging
  4. import os
  5. from datetime import datetime
  6. from pathlib import Path
  7. _FILE_HANDLER_FLAG = "_yibiao_file_logging_enabled"
  8. def _backend_dir() -> Path:
  9. return Path(__file__).resolve().parents[2]
  10. def setup_logging(enable_file_logging: bool) -> None:
  11. """初始化通用日志配置。"""
  12. if not enable_file_logging:
  13. return
  14. root_logger = logging.getLogger()
  15. if getattr(root_logger, _FILE_HANDLER_FLAG, False):
  16. return
  17. logs_dir = _backend_dir() / "logs"
  18. logs_dir.mkdir(parents=True, exist_ok=True)
  19. file_name = f"app-{datetime.now():%Y%m%d}-{os.getpid()}.log"
  20. file_handler = logging.FileHandler(logs_dir / file_name, encoding="utf-8")
  21. file_handler.setLevel(logging.DEBUG)
  22. file_handler.setFormatter(
  23. logging.Formatter(
  24. "%(asctime)s [%(levelname)s] %(name)s: %(message)s",
  25. datefmt="%Y-%m-%d %H:%M:%S",
  26. )
  27. )
  28. root_logger.setLevel(logging.DEBUG)
  29. root_logger.addHandler(file_handler)
  30. setattr(root_logger, _FILE_HANDLER_FLAG, True)