sls_setup.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. """阿里云 SLS 日志上报 — 工具集。
  2. 数据流:
  3. Python logger → logging_setup.setup_logging()
  4. → 本地 FileHandler(全量保留)
  5. → QueuedLogHandler(异步队列 + 批量 flush)
  6. → SLS info-log / error-log
  7. 设计原则:
  8. · 配置缺失 → logging_setup 内部自动降级 → 不上报,主链路不受影响
  9. · 上报失败 → SDK 内部 retry + SafeQueuedLogHandler 吞异常,主链路不受影响
  10. · INFO/WARNING 进 info-log,ERROR/CRITICAL 进 error-log
  11. 注意:
  12. · 生产环境日志初始化入口是 ``logging_setup.setup_logging()``,已内置 SLS 挂载
  13. · 本模块仅提供 smoke_test 等辅助工具,不重复实现日志初始化
  14. """
  15. from __future__ import annotations
  16. import logging
  17. import os
  18. import sys
  19. logger = logging.getLogger(__name__)
  20. def smoke_test() -> bool:
  21. """烟囱测试:发一条 INFO + 一条 WARNING + 一条 ERROR,等 3 秒让队列 flush。
  22. 用法(从项目根目录):
  23. cd examples/auto_put_ad_mini
  24. python -c "from tools.sls_setup import smoke_test; smoke_test()"
  25. 然后去 SLS 控制台 logstore=info-log / error-log 查看是否收到。
  26. """
  27. # 确保 examples/auto_put_ad_mini 在 sys.path 中,兼容不同工作目录
  28. _project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  29. if _project_root not in sys.path:
  30. sys.path.insert(0, _project_root)
  31. # 加载 .env 中的 SLS 凭证(logging_setup 不自行 load_dotenv,由调用方负责)
  32. from dotenv import load_dotenv
  33. load_dotenv(os.path.join(_project_root, ".env"))
  34. from logging_setup import setup_logging
  35. # setup_logging() 内部已调用 attach_sls_handler(),无需重复挂载
  36. setup_logging(level="INFO", capture_output=False)
  37. test_logger = logging.getLogger("sls_smoke_test")
  38. test_logger.info("[smoke_test] hello SLS - INFO 消息 event=smoke_info")
  39. test_logger.warning("[smoke_test] hello SLS - WARNING 消息 event=smoke_warn")
  40. test_logger.error("[smoke_test] hello SLS - ERROR 消息 event=smoke_error code=999")
  41. logger.info("[smoke_test] 已发 3 条,等 3s 让 QueuedLogHandler flush")
  42. import time
  43. time.sleep(3)
  44. logger.info("[smoke_test] 测试完成,请去 SLS 控制台 logstore 查看")
  45. return True