logging_config.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. # Set root logger level to CRITICAL to suppress all third-party logs
  37. logging.root.setLevel(logging.CRITICAL)
  38. # Configure our application logger
  39. logger = logging.getLogger('mylib')
  40. logger.setLevel(logging.DEBUG)
  41. # Clear any existing handlers
  42. logger.handlers.clear()
  43. # Add our handlers to the application logger
  44. logger.addHandler(handler)
  45. logger.addHandler(file_handler)
  46. # Disable propagation for all third-party loggers
  47. for name in logging.root.manager.loggerDict:
  48. if not name.startswith('mylib'):
  49. logging.getLogger(name).propagate = False