Logforma SDK package for observability event logging
Project description
logforma.ru — Визуализация и трассировка процессов внутри систем
pip install logforma-sdk
1. Быстрый Старт (минимум)
Шаг 1. Инициализация (один раз при старте сервиса)
from logforma import logforma_init
logforma_init(
service_name="candidate_eval_service",
service_instance_id="candidate_eval_service-1",
queue_name="candidate_eval_service_inbound",
log_db_queries=True,
mask_fields={"token", "password", "email"},
trace_level="standard",
)
Шаг 2. Декорируйте бизнес-функции
from logforma import logforma_trace
@logforma_trace()
async def validate_candidate(payload: dict) -> dict:
return {"valid": True}
Шаг 3. Для consume-сервиса используйте logforma_consume(...)
import asyncio
from logforma import logforma_consume, logforma_trace
@logforma_trace()
async def handle_event(event: dict) -> bool:
return True
def process_queue_event(event: dict) -> bool:
return asyncio.run(logforma_consume(event, handle_event, seq_offset=2_000_000))
Что делает logforma_consume(...):
- ставит consume-контекст (
transaction_id,seq_no,path,flow); - связывает вложенные вызовы SDK в одну трассу;
- убирает необходимость вручную писать
with logforma_with_consume_event(...).
2. Какие Функции Автоматические, А Какие Нет
2.1 Автоматические (рекомендуемый путь)
Этого достаточно для большинства сервисов:
logforma_init(...)@logforma_trace()logforma_consume(...)для queue-consumer
Что SDK заполнит автоматически:
command.function.name(из<module>.<qualname>);call_id,seq_no, тайминги;service.name,service.instance.id,queue.name(из init/config/context);trace_id,span_id,parent_span_id(если trace включен);db_queries_preview(если включено DB-логирование и DB-клиент инструментирован).
2.2 Неавтоматические (используются вручную по необходимости)
Используйте только если внутри функции есть отдельный шаг маршрута:
logforma_log_publish(...)— шаг отправки в очередь;logforma_log_db(...)— ручной шаг SQL (fallback, если нет instrumentation);logforma_log_http(...)— шаг внешнего HTTP;logforma_log_service_step(...)— ручной сервисный шаг;logforma_with_context(...)— ручная установка runtime-контекста;logforma_with_consume_event(...)— низкоуровневый consume-контекст (edge-cases);logforma_config_module(...)— локальный override конфигурации;logforma_current_context()— чтение текущего контекста;logforma_instrument(...),logforma_instrument_db_cursor(...),logforma_instrument_psycopg2_connection(...),logforma_record_db_query(...)— инструментация БД;- legacy-совместимость:
logforma_log_call(...),logforma_log_event(...).
Пример ручных внутренних шагов:
from logforma import logforma_log_publish, logforma_log_db, logforma_log_http, logforma_trace
@logforma_trace()
async def process_candidate(payload: dict) -> dict:
candidate_id = payload["candidate_id"]
await logforma_log_publish("scoring_worker_service_inbound")
await logforma_log_db(
"SELECT id, score FROM candidates WHERE id = %s",
params_preview=[candidate_id],
db_alias="CandidateDB",
)
await logforma_log_http("POST", "https://risk-service.local/check", status_code=200)
return {"ok": True}
Если отдельного шага маршрута внутри функции нет, достаточно одного @logforma_trace().
3. Правила Интеграции (важно)
logforma_init(...)вызывайте ровно один раз в entrypoint сервиса.- Во внутренних модулях повторно
logforma_init(...)не вызывайте. - Сигнатуры бизнес-функций ради SDK не меняйте.
- Ручной
_logforma_contextи ручнойctx["db_queries"]не используйте. - Для локальных override применяйте
logforma_config_module(...).
4. HTTP И Queue Сценарии
HTTP entrypoint
logforma_consume(...)не нужен.- Обычно достаточно
@logforma_trace(). - Helper-функции (
logforma_log_publish/logforma_log_db/logforma_log_http) добавляйте только если есть реальный отдельный шаг.
Queue-consumer entrypoint
- Используйте
logforma_consume(...)+@logforma_trace(). - Низкоуровневый
logforma_with_consume_event(...)оставлен для edge-cases.
5. Flow И Transaction ID
flow
- Для consume-сессии приоритет:
command.action->flow.name->logforma_init(flow_name=...). - В helper-вызовах можно передать
flow_name=..., если нужно переопределение только для конкретного события.
transaction.id
- Рекомендуется передавать внешний
transaction.idдля сквозной корреляции. - Если не передан, SDK сгенерирует fallback
tx-<uuid>.
6. DB Логирование (пошагово)
Самое важное: как включить DB-логирование без ручных SQL-текстов
Чтобы SQL попадали в логи автоматически (без logforma_log_db("SELECT ...") вручную), нужны только 2 действия:
- Включить флаг:
logforma_init(..., log_db_queries=True)
- Инструментировать DB-подключение/курсор через SDK:
from logforma import logforma_instrument
conn = logforma_instrument(conn, db_alias="MainDB")
После этого SDK сам перехватывает execute(...)/executemany(...) и пишет SQL в db_queries_preview.
Шаг 1. Включите логирование
- Через
logforma_init(log_db_queries=True)илиlogforma_config_module(log_db_queries=True). - Приоритет: параметр декоратора ->
logforma_config_module(...)->logforma_init(...).
Шаг 2. Инструментируйте DB-клиент
Instrumentation = обёртка connection/cursor через SDK, чтобы перехватывать execute(...) и писать SQL в runtime-контекст.
Пример для psycopg2:
import psycopg2
from psycopg2.extras import RealDictCursor
from logforma import logforma_instrument
def connect():
conn = psycopg2.connect(dsn, cursor_factory=RealDictCursor)
return logforma_instrument(conn, db_alias="LogformaDB")
Поведение logforma_instrument(...):
- если коннектор распознан, применяется инструментатор;
- если не распознан, SDK вернёт исходный объект (passthrough, без падения).
Шаг 3. Проверяйте db_queries_preview
В деталях function step в UI появится список:
statementparams_previewdb_alias
Пример:
[
{
"statement": "SELECT id, score FROM candidates WHERE id = %s",
"params_preview": ["cand-1001"],
"db_alias": "LogformaDB"
}
]
Если instrumentation нет, используйте fallback:
await logforma_log_db("SELECT ...", params_preview=[candidate_id], db_alias="CandidateDB")
7. Trace Level
trace_level задается в logforma_init(...):
off— trace-блок не добавляется;basic,standard,verbose— trace включен.
8. Legacy Совместимость
logforma_log_call(...)иlogforma_log_event(...)поддерживаются.- Для нового кода целевой стиль:
logforma_init(...)+@logforma_trace()+ короткие helper-вызовы по необходимости.
9. Пилот На Тестовых Сервисах
- Контур
test-*описан вdocs/project/12-sdk-pilot.md. - Быстрый прогон:
python scripts/trigger_sdk_pilot.py
- Скрипт запускает сценарии
happy/error/warning/missing tx/unsupported connectorи печатаетtransaction_id,flow nodes/edges.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file logforma_sdk-0.1.1.tar.gz.
File metadata
- Download URL: logforma_sdk-0.1.1.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d0068d6f72279406b1f6d62d97dba4eeb6f154672c53d4a313e5b42f20b86f9
|
|
| MD5 |
30b47c31940d5b1311a3259a47b989a6
|
|
| BLAKE2b-256 |
fa782d632b6d98976bb00a653c4ae0c18d44c7c6f3dff7df17d3c56b6470c042
|
File details
Details for the file logforma_sdk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: logforma_sdk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da3e6beea0fab9a0f9b177e0e4d4f7866bbb2313e254e900c530534a2118be0e
|
|
| MD5 |
e25a914963ec21f0464be7f2ca5b1aed
|
|
| BLAKE2b-256 |
3cc04dd5bc2bcc1273293789cc7c23f6dc3b98cd83396fb6c59246c7ef9b55ac
|