local_log.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import sys
  2. from datetime import date, timedelta, datetime
  3. from loguru import logger
  4. from pathlib import Path
  5. class Local:
  6. # 日期常量
  7. now = datetime.now()
  8. today = date.today()
  9. yesterday = (today - timedelta(days=1)).strftime("%Y-%m-%d")
  10. tomorrow = (today + timedelta(days=1)).strftime("%Y-%m-%d")
  11. @staticmethod
  12. def init_logger(platform: str, mode: str = "prod", log_level: str = "INFO", log_to_console: bool = False,
  13. rotation: str = "00:00", retention: str = "10 days"):
  14. """
  15. 初始化日志记录器
  16. :param platform: 平台名称,用于区分日志目录
  17. :param mode: 运行环境(如 prod/test/dev)
  18. :param log_level: 日志级别(如 INFO、DEBUG)
  19. :param log_to_console: 是否同时输出到控制台
  20. :param rotation: 日志文件切分策略(默认每天 00:00)
  21. :param retention: 日志保留时间(默认10天)
  22. """
  23. # 创建日志目录
  24. log_dir = Path(f"./log_store/{platform}")
  25. log_dir.mkdir(parents=True, exist_ok=True)
  26. # 设置日志文件名
  27. log_filename = f"{platform}-{mode}-{Local.today.strftime('%Y-%m-%d')}.log"
  28. log_file_path = log_dir / log_filename
  29. # 清除默认 handler
  30. logger.remove()
  31. # 添加文件日志 handler
  32. logger.add(
  33. str(log_file_path),
  34. level=log_level.upper(),
  35. rotation=rotation,
  36. retention=retention,
  37. encoding="utf-8",
  38. enqueue=True
  39. )
  40. # 可选:输出到控制台
  41. if log_to_console:
  42. logger.add(
  43. sink=sys.stdout,
  44. level=log_level.upper(),
  45. format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level}</level> | {message}"
  46. )
  47. return logger