logging_config.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import logging
  2. import sys
  3. import os
  4. from pathlib import Path
  5. WORK_DIR = Path(__file__).resolve().parent
  6. def _get_relative_path(pathname):
  7. """将绝对路径转换为相对于项目根目录的相对路径"""
  8. try:
  9. # 获取项目根目录
  10. project_root = WORK_DIR.parent
  11. # 转换为相对路径
  12. relative_path = os.path.relpath(pathname, start=project_root)
  13. return relative_path
  14. except ValueError:
  15. # 如果路径不在项目目录下,返回原路径
  16. return pathname
  17. class RelativePathFormatter(logging.Formatter):
  18. def format(self, record):
  19. # 转换路径为相对路径
  20. record.pathname = _get_relative_path(record.pathname)
  21. return super().format(record)
  22. def setup_logging():
  23. # Create logs directory
  24. logs_dir = Path(WORK_DIR / "temp/logs/aider_coder")
  25. # mkdir -p
  26. logs_dir.mkdir(parents=True, exist_ok=True)
  27. # Create formatter
  28. formatter = RelativePathFormatter(
  29. '%(asctime)s - %(pathname)s:%(lineno)d - %(levelname)s - %(message)s'
  30. )
  31. # Configure logging
  32. handler = logging.StreamHandler(sys.stdout)
  33. handler.setFormatter(formatter)
  34. file_handler = logging.FileHandler(logs_dir / "aider_coder.log")
  35. file_handler.setFormatter(formatter)
  36. logging.basicConfig(
  37. level=logging.DEBUG,
  38. handlers=[handler, file_handler]
  39. )
  40. # Set specific logger levels
  41. logging.getLogger('urllib3').setLevel(logging.WARNING)
  42. logging.getLogger('requests').setLevel(logging.WARNING)
  43. logging.getLogger('chardet').setLevel(logging.WARNING)