@@ -5,6 +5,57 @@ All notable changes to this project will be documented in this file.
55The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.0.0/ ) ,
66and this project adheres to [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
77
8+ ## [ 0.8.4] - 2026-03-21
9+
10+ ### Added
11+
12+ - ` AsyncLogTideClient ` : full async client using ` aiohttp ` with the same API as the
13+ sync client — supports ` async with ` , ` await client.start() ` , and all logging,
14+ flush, query, and stream methods as coroutines (` pip install logtide-sdk[async] ` )
15+ - ` LogTideHandler ` : standard ` logging.Handler ` for drop-in integration with Python's
16+ built-in logging module — forwards records to LogTide with structured exception
17+ metadata when ` exc_info=True ` is used
18+ - ` PayloadLimitsOptions ` : configurable safeguards against 413 errors — per-field size
19+ cap, total entry size cap, named field exclusion, and automatic base64 removal
20+ - ` LogTideStarletteMiddleware ` : standalone Starlette ASGI middleware independent of
21+ FastAPI (` pip install logtide-sdk[starlette] ` )
22+ - ` serialize_exception() ` exported at top level for use in custom integrations
23+ - ` payload_limits ` field on ` ClientOptions `
24+
25+ ### Changed
26+
27+ - ** BREAKING** API paths updated to match v1 server contract:
28+ - ` POST /api/logs ` → ` POST /api/v1/ingest `
29+ - ` GET /api/logs ` → ` GET /api/v1/logs `
30+ - ` GET /api/logs/trace/{id} ` → ` GET /api/v1/logs/trace/{id} `
31+ - ` GET /api/logs/stats ` → ` GET /api/v1/logs/aggregated `
32+ - ` GET /api/logs/stream ` → ` GET /api/v1/logs/stream `
33+ - ** BREAKING** Auth header changed from ` Authorization: Bearer <key> ` to ` X-API-Key: <key> `
34+ - ** BREAKING** Error metadata key changed from ` "error" ` to ` "exception" ` ; value is now a
35+ structured object with ` type ` , ` message ` , ` language ` , ` stacktrace ` (array of
36+ ` {file, function, line} ` frames), and ` raw `
37+ - ** BREAKING** ` stream() ` no longer blocks — it runs in a background daemon thread and
38+ returns a ` Callable[[], None] ` stop function immediately
39+ - ** BREAKING** Buffer overflow no longer raises ` BufferFullError ` ; logs are silently
40+ dropped and ` logs_dropped ` is incremented (` BufferFullError ` class is kept for
41+ backwards-compatible catch blocks)
42+ - ` requests.Session ` is now created once and reused across all HTTP calls for
43+ connection reuse and reduced TCP overhead
44+ - ` datetime.utcnow() ` replaced with ` datetime.now(timezone.utc) ` throughout;
45+ ` LogEntry.time ` now includes ` +00:00 ` timezone suffix (ISO 8601 compliant)
46+ - Middleware ` __init__.py ` now uses per-framework ` try/except ` guards — importing
47+ ` logtide_sdk.middleware ` no longer fails if only a subset of frameworks are installed
48+
49+ ### Fixed
50+
51+ - Flask, Django, and FastAPI middleware ` _log_error ` methods were passing raw
52+ ` Exception ` objects into the metadata dict instead of serializing them — exceptions
53+ are now serialized via ` serialize_exception() `
54+ - ` log() ` triggered ` flush() ` while holding ` _buffer_lock ` , causing a potential
55+ deadlock under concurrent access — flush is now triggered outside the lock
56+ - ` __version__ ` in ` __init__.py ` was incorrectly set to ` "0.1.0" ` despite the
57+ package being at ` 0.1.2 `
58+
859## [ 0.1.0] - 2026-01-13
960
1061### Added
@@ -28,4 +79,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2879- FastAPI middleware for auto-logging HTTP requests
2980- Full type hints support for Python 3.8+
3081
31- [ 0.1.0 ] : https://github.com/logtide-dev/logtide-sdk-python/releases/tag/v0.1.0
82+ [ 0.8.4 ] : https://github.com/logtide-dev/logtide-python/compare/v0.1.0...v0.8.4
83+ [ 0.1.0 ] : https://github.com/logtide-dev/logtide-python/releases/tag/v0.1.0
0 commit comments