oper_log_context.py 868 B

12345678910111213141516171819202122232425262728293031323334
  1. """请求级操作日志元数据(ContextVar)"""
  2. from __future__ import annotations
  3. from contextvars import ContextVar
  4. from dataclasses import dataclass
  5. from typing import Optional
  6. @dataclass
  7. class OperLogMeta:
  8. business_title: Optional[str] = None
  9. business_type: Optional[int] = None
  10. business_id: Optional[str] = None
  11. oper_summary: Optional[str] = None
  12. _oper_log_meta: ContextVar[Optional[OperLogMeta]] = ContextVar("oper_log_meta", default=None)
  13. def set_oper_log_meta(meta: OperLogMeta) -> None:
  14. _oper_log_meta.set(meta)
  15. def get_oper_log_meta() -> Optional[OperLogMeta]:
  16. return _oper_log_meta.get()
  17. def clear_oper_log_meta() -> None:
  18. _oper_log_meta.set(None)
  19. def snapshot_oper_log_meta() -> Optional[OperLogMeta]:
  20. """供异步落库线程使用,避免 ContextVar 跨线程丢失。"""
  21. return get_oper_log_meta()