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