Releases: logtide-dev/logtide-python
Releases · logtide-dev/logtide-python
v0.8.4
[0.8.4] - 2026-03-21
Added
AsyncLogTideClient: full async client usingaiohttpwith the same API as the
sync client — supportsasync with,await client.start(), and all logging,
flush, query, and stream methods as coroutines (pip install logtide-sdk[async])LogTideHandler: standardlogging.Handlerfor drop-in integration with Python's
built-in logging module — forwards records to LogTide with structured exception
metadata whenexc_info=Trueis usedPayloadLimitsOptions: configurable safeguards against 413 errors — per-field size
cap, total entry size cap, named field exclusion, and automatic base64 removalLogTideStarletteMiddleware: standalone Starlette ASGI middleware independent of
FastAPI (pip install logtide-sdk[starlette])serialize_exception()exported at top level for use in custom integrationspayload_limitsfield onClientOptions
Changed
- BREAKING API paths updated to match v1 server contract:
POST /api/logs→POST /api/v1/ingestGET /api/logs→GET /api/v1/logsGET /api/logs/trace/{id}→GET /api/v1/logs/trace/{id}GET /api/logs/stats→GET /api/v1/logs/aggregatedGET /api/logs/stream→GET /api/v1/logs/stream
- BREAKING Auth header changed from
Authorization: Bearer <key>toX-API-Key: <key> - BREAKING Error metadata key changed from
"error"to"exception"; value is now a
structured object withtype,message,language,stacktrace(array of
{file, function, line}frames), andraw - BREAKING
stream()no longer blocks — it runs in a background daemon thread and
returns aCallable[[], None]stop function immediately - BREAKING Buffer overflow no longer raises
BufferFullError; logs are silently
dropped andlogs_droppedis incremented (BufferFullErrorclass is kept for
backwards-compatible catch blocks) requests.Sessionis now created once and reused across all HTTP calls for
connection reuse and reduced TCP overheaddatetime.utcnow()replaced withdatetime.now(timezone.utc)throughout;
LogEntry.timenow includes+00:00timezone suffix (ISO 8601 compliant)- Middleware
__init__.pynow uses per-frameworktry/exceptguards — importing
logtide_sdk.middlewareno longer fails if only a subset of frameworks are installed
Fixed
- Flask, Django, and FastAPI middleware
_log_errormethods were passing raw
Exceptionobjects into the metadata dict instead of serializing them — exceptions
are now serialized viaserialize_exception() log()triggeredflush()while holding_buffer_lock, causing a potential
deadlock under concurrent access — flush is now triggered outside the lock__version__in__init__.pywas incorrectly set to"0.1.0"despite the
package being at0.1.2