Skip to content

Releases: logtide-dev/logtide-python

v0.8.4

21 Mar 22:52
a0b0aa4

Choose a tag to compare

[0.8.4] - 2026-03-21

Added

  • AsyncLogTideClient: full async client using aiohttp with the same API as the
    sync client — supports async with, await client.start(), and all logging,
    flush, query, and stream methods as coroutines (pip install logtide-sdk[async])
  • LogTideHandler: standard logging.Handler for drop-in integration with Python's
    built-in logging module — forwards records to LogTide with structured exception
    metadata when exc_info=True is used
  • PayloadLimitsOptions: configurable safeguards against 413 errors — per-field size
    cap, total entry size cap, named field exclusion, and automatic base64 removal
  • LogTideStarletteMiddleware: standalone Starlette ASGI middleware independent of
    FastAPI (pip install logtide-sdk[starlette])
  • serialize_exception() exported at top level for use in custom integrations
  • payload_limits field on ClientOptions

Changed

  • BREAKING API paths updated to match v1 server contract:
    • POST /api/logsPOST /api/v1/ingest
    • GET /api/logsGET /api/v1/logs
    • GET /api/logs/trace/{id}GET /api/v1/logs/trace/{id}
    • GET /api/logs/statsGET /api/v1/logs/aggregated
    • GET /api/logs/streamGET /api/v1/logs/stream
  • BREAKING Auth header changed from Authorization: Bearer <key> to X-API-Key: <key>
  • BREAKING Error metadata key changed from "error" to "exception"; value is now a
    structured object with type, message, language, stacktrace (array of
    {file, function, line} frames), and raw
  • BREAKING stream() no longer blocks — it runs in a background daemon thread and
    returns a Callable[[], None] stop function immediately
  • BREAKING Buffer overflow no longer raises BufferFullError; logs are silently
    dropped and logs_dropped is incremented (BufferFullError class is kept for
    backwards-compatible catch blocks)
  • requests.Session is now created once and reused across all HTTP calls for
    connection reuse and reduced TCP overhead
  • datetime.utcnow() replaced with datetime.now(timezone.utc) throughout;
    LogEntry.time now includes +00:00 timezone suffix (ISO 8601 compliant)
  • Middleware __init__.py now uses per-framework try/except guards — importing
    logtide_sdk.middleware no longer fails if only a subset of frameworks are installed

Fixed

  • Flask, Django, and FastAPI middleware _log_error methods were passing raw
    Exception objects into the metadata dict instead of serializing them — exceptions
    are now serialized via serialize_exception()
  • log() triggered flush() while holding _buffer_lock, causing a potential
    deadlock under concurrent access — flush is now triggered outside the lock
  • __version__ in __init__.py was incorrectly set to "0.1.0" despite the
    package being at 0.1.2