logger_setup.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import os
  2. import logging
  3. from logging.handlers import RotatingFileHandler
  4. import vs_log_macros # 导入你的宏模块
  5. def setup_app_logger(app_name: str, log_dir: str = "logs") -> logging.Logger:
  6. """
  7. 配置并返回一个标准的 Logger,支持终端输出和文件滚动保存。
  8. """
  9. if not os.path.exists(log_dir):
  10. os.makedirs(log_dir)
  11. logger = logging.getLogger(app_name)
  12. logger.setLevel(logging.INFO)
  13. # 避免重复添加 Handler
  14. if not logger.handlers:
  15. log_file = os.path.join(log_dir, f"{app_name.lower()}.log")
  16. # 1. 终端输出
  17. console_handler = logging.StreamHandler()
  18. console_handler.setLevel(logging.INFO)
  19. # 2. 文件输出
  20. file_handler = RotatingFileHandler(
  21. log_file, maxBytes=10 * 1024 * 1024, backupCount=10, encoding='utf-8'
  22. )
  23. file_handler.setLevel(logging.INFO)
  24. # 设置格式
  25. formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
  26. console_handler.setFormatter(formatter)
  27. file_handler.setFormatter(formatter)
  28. logger.addHandler(console_handler)
  29. logger.addHandler(file_handler)
  30. # ==========================================
  31. # 核心:将这个专属 Logger 注入到宏!
  32. # 这样整个系统里所有的 VSC_INFO 都会输出到你的 app_name.log 里!
  33. # ==========================================
  34. vs_log_macros.set_active_logger(logger)
  35. return logger