Logger.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import logging
  2. from logging.handlers import TimedRotatingFileHandler
  3. import os
  4. from datetime import datetime
  5. LOG_FORMAT = "%(asctime)s [%(levelname)s] [%(threadName)s] %(message)s"
  6. def _build_logger(name: str, log_file: str) -> logging.Logger:
  7. logger_obj = logging.getLogger(name)
  8. if logger_obj.handlers:
  9. return logger_obj
  10. logger_obj.setLevel(logging.DEBUG)
  11. logger_obj.propagate = False
  12. console_handler = logging.StreamHandler()
  13. console_handler.setLevel(logging.INFO)
  14. file_handler = logging.FileHandler(log_file, encoding="utf-8")
  15. file_handler.setLevel(logging.DEBUG)
  16. formatter = logging.Formatter(LOG_FORMAT)
  17. console_handler.setFormatter(formatter)
  18. file_handler.setFormatter(formatter)
  19. logger_obj.addHandler(console_handler)
  20. logger_obj.addHandler(file_handler)
  21. return logger_obj
  22. def get_spider_logger(spider_name: str) -> logging.Logger:
  23. base_dir = os.path.join("logs", spider_name)
  24. os.makedirs(base_dir, exist_ok=True)
  25. time_str = datetime.now().strftime("%Y-%m-%d_%H%M")
  26. log_file = os.path.join(base_dir, f"{spider_name}_{time_str}.log")
  27. return _build_logger(f"spider.{spider_name}", log_file)
  28. import sys
  29. script_name = os.path.basename(sys.argv[0]).lower()
  30. if 'jd' in script_name:
  31. prefix = 'jd'
  32. elif 'taobao' in script_name:
  33. prefix = 'taobao'
  34. elif 'pdd' in script_name:
  35. prefix = 'pdd'
  36. elif 'xhs' in script_name:
  37. prefix = 'xhs'
  38. else:
  39. prefix = 'app'
  40. # 获取当前时间字符串精确到分
  41. time_str = datetime.now().strftime("%Y-%m-%d_%H%M")
  42. legacy_dir = "logs"
  43. os.makedirs(legacy_dir, exist_ok=True)
  44. legacy_file = os.path.join(legacy_dir, f"{prefix}_{time_str}.log")
  45. logger = _build_logger("MyLogger", legacy_file)
  46. # 测试
  47. # logger.debug("调试信息")
  48. # logger.info("普通提示信息")
  49. # logger.warning("警告信息")
  50. # logger.error("错误信息")
  51. # logger.critical("严重错误信息")