Files
prod-end-2026/backend/app/utils/log_context.py
T
2026-03-17 18:32:44 +03:00

50 lines
1.2 KiB
Python

from __future__ import annotations
from contextvars import ContextVar
from typing import Any
_trace_id_ctx: ContextVar[str | None] = ContextVar("trace_id", default=None)
_path_ctx: ContextVar[str | None] = ContextVar("path", default=None)
_method_ctx: ContextVar[str | None] = ContextVar("method", default=None)
_user_id_ctx: ContextVar[str | None] = ContextVar("user_id", default=None)
def set_request_context(*, trace_id: str | None, path: str | None, method: str | None) -> None:
_trace_id_ctx.set(trace_id)
_path_ctx.set(path)
_method_ctx.set(method)
def set_user_context(*, user_id: str | None) -> None:
_user_id_ctx.set(user_id)
def clear_log_context() -> None:
_trace_id_ctx.set(None)
_path_ctx.set(None)
_method_ctx.set(None)
_user_id_ctx.set(None)
def get_log_context() -> dict[str, Any]:
payload: dict[str, Any] = {}
trace_id = _trace_id_ctx.get()
if trace_id:
payload["trace_id"] = trace_id
path = _path_ctx.get()
if path:
payload["path"] = path
method = _method_ctx.get()
if method:
payload["method"] = method
user_id = _user_id_ctx.get()
if user_id:
payload["user_id"] = user_id
return payload