logging_config.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 WARNING to suppress third-party logs
  37. logging.basicConfig(
  38. level=logging.WARNING,
  39. handlers=[handler, file_handler]
  40. )
  41. # Set our application logger to DEBUG
  42. logger = logging.getLogger('mylib')
  43. logger.setLevel(logging.DEBUG)
  44. # Add our handlers to the application logger
  45. logger.addHandler(handler)
  46. logger.addHandler(file_handler)
  47. # Set specific logger levels for common third-party libraries
  48. logging.getLogger('urllib3').setLevel(logging.WARNING)
  49. logging.getLogger('requests').setLevel(logging.WARNING)
  50. logging.getLogger('chardet').setLevel(logging.WARNING)
  51. logging.getLogger('openai').setLevel(logging.WARNING)
  52. logging.getLogger('httpcore').setLevel(logging.WARNING)
  53. logging.getLogger('httpx').setLevel(logging.WARNING)