WechatOnCloud/bridge/woc_bridge/ui/trace.py
Kris 15fc62d478 feat: 完成微信UI自动化新架构全量开发与集成
- 新增六层UI自动化架构:从Backend到Capabilities的完整分层实现
- 添加WeChat 4.0分辨率适配Profile与图像模板资源
- 实现幂等缓存、熔断器、重试策略、链路追踪与监控指标
- 新增头像下载安全校验、发布朋友圈路径白名单防护
- 优化密钥缓存、DB校验逻辑与初始化流程
- 补充完整错误码体系与启动清场机制
2026-07-16 01:19:47 +08:00

54 lines
1.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""TraceID 贯穿ContextVar + 12-hex 生成 + logging.Filter。
每个 HTTP 请求生成唯一 trace_id注入 ContextVar日志通过 TraceFilter
自动带上 trace_id 字段,便于全链路追踪。
"""
from __future__ import annotations
import logging
import random
import contextvars
# 单请求内贯穿的 trace_id
trace_id_var: contextvars.ContextVar[str] = contextvars.ContextVar(
"trace_id", default=""
)
def new_trace_id() -> str:
"""生成 12 字符 hex trace_id。
Returns:
12 字符 hex 字符串(如 "a3b5c7d9e1f2"
"""
return f"{random.getrandbits(48):012x}"
def get_trace_id() -> str:
"""获取当前 ContextVar 中的 trace_id。"""
return trace_id_var.get()
def set_trace_id(trace_id: str) -> contextvars.Token:
"""设置 trace_id返回 Token 供 reset 使用。"""
return trace_id_var.set(trace_id)
def reset_trace_id(token: contextvars.Token) -> None:
"""重置 trace_id 到之前的状态。"""
trace_id_var.reset(token)
class TraceFilter(logging.Filter):
"""日志 Filter在每条日志的 extra 中注入 trace_id。
用法:
logger.addFilter(TraceFilter())
日志格式中可用 %(trace_id)s 引用。
"""
def filter(self, record: logging.LogRecord) -> bool:
record.trace_id = trace_id_var.get()
return True