logger_config.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import os
  2. import logging
  3. from colorama import Fore, Style, init
  4. import inspect # 添加导入用于获取调用堆栈
  5. current_dir = os.path.dirname(os.path.abspath(__file__))
  6. log_path = os.path.join(current_dir, "..", "logs", "ai_swap.log")
  7. # 初始化 colorama
  8. init(autoreset=True)
  9. class ColoredFormatter(logging.Formatter):
  10. COLORS = {
  11. 'DEBUG': Fore.CYAN,
  12. 'INFO': Fore.GREEN,
  13. 'WARNING': Fore.YELLOW,
  14. 'ERROR': Fore.RED,
  15. 'CRITICAL': Fore.RED + Style.BRIGHT,
  16. }
  17. def format(self, record):
  18. levelname = record.levelname
  19. # 添加文件名和行号到日志记录
  20. record.filename = os.path.basename(record.pathname) # 仅显示文件名
  21. record.location = f"{record.filename}:{record.lineno}"
  22. if levelname in self.COLORS:
  23. color = self.COLORS[levelname]
  24. record.levelname = f"{color}{levelname}{Style.RESET_ALL}"
  25. record.msg = f"{color}{record.msg}{Style.RESET_ALL}"
  26. return super().format(record)
  27. def setup_logger(name):
  28. # 配置日志
  29. logger = logging.getLogger(name)
  30. logger.setLevel(logging.DEBUG)
  31. # 创建控制台处理器
  32. console_handler = logging.StreamHandler()
  33. console_handler.setLevel(logging.DEBUG)
  34. # 创建文件处理器
  35. file_handler = logging.FileHandler(log_path, encoding='utf-8')
  36. file_handler.setLevel(logging.DEBUG)
  37. # 创建格式化器 - 添加详细位置信息 [文件名:行号]
  38. console_formatter = ColoredFormatter(
  39. '%(asctime)s - %(levelname)s - [%(location)s] %(funcName)s() - %(message)s'
  40. )
  41. # 文件处理器使用非彩色格式
  42. file_formatter = logging.Formatter(
  43. '%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] %(funcName)s() - %(message)s'
  44. )
  45. console_handler.setFormatter(console_formatter)
  46. file_handler.setFormatter(file_formatter)
  47. # 将处理器添加到日志记录器
  48. logger.addHandler(console_handler)
  49. logger.addHandler(file_handler)
  50. return logger