local_log.py 1.9 KB

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