Releases: logtide-dev/logtide-kotlin-java
Releases · logtide-dev/logtide-kotlin-java
Release list
v0.9.8
v0.9.7
Added
- New module
logtide-otel: OpenTelemetry tracing preset (LogTideOpenTelemetry.create) — one call configures the official OTel SDK to export spans to LogTide (/v1/otlp/traces,X-API-Key) withservice.name/deployment.environment/service.versionresource identity and a parent-basedtracesSampleRatesampler. - Active-span log correlation: entries captured inside an active OTel span automatically carry its
trace_id/span_id(ActiveTraceContextpluggable lookup in core).
v0.9.6
Added
LogTideClientOptions.beforeSend: hook called before buffering — mutate the entry or returnnullto drop it. A raising hook never loses the entry.LogTideClientOptions.sampleRate(0.0–1.0, default 1.0): per-entry sampling applied afterbeforeSend.
v0.9.5
v0.9.4
Added
- Per-request scope isolation in the Ktor plugin: the default interceptor now activates a per-request
Scope(coroutine-safe) alongside the trace-id element — breadcrumbs/user/tags set inside a handler stay local to that request, and the scope carries the request's trace context. ScopeContext.asContextElement(scope)for custom coroutine-based middleware.
v0.9.3
Added
- Scope API: per-request/per-task context —
Scope,ScopeContext,withScope { }, coroutine-safewithScopeSuspend { },LogTideUser,Breadcrumb. Scope state (tags, extras, user, breadcrumbs ring buffer, session, trace context) is merged into every captured entry; entry-level values win. LogEntry.spanIdandLogEntry.sessionId, serialized as top-levelspan_id/session_id.- Per-request scope isolation in the Spring interceptor and Jakarta filter: breadcrumbs/user/tags set inside a request stay local to it, and request logs inherit the request's trace context.
Fixed
- Global metadata no longer overrides entry-level metadata on key collision (entry wins, per the cross-SDK contract).
v0.9.2
Added
- DSN support:
LogTideClientOptions.fromDsn("https://lp_key@host[/path]") { ... }plusDsn.parseandDsnParseException. A malformed DSN throws at init time. LogTideClientOptions.service: configure the service once and call log methods with just the message —client.info("user logged in"),client.error("boom", exc). The legacy(service, message)overloads keep working.- Every entry now carries
metadata.sdk = {"name": "logtide-kotlin", "version": ...}(caller-providedsdkkey wins).
v0.9.1
Added
- W3C Trace Context support:
TraceContextwithparseTraceparent,formatTraceparent,generateTraceId,generateSpanId,resolveTraceId. - Spring, Ktor and Jakarta integrations now resolve the inbound trace context per the W3C spec:
traceparentheader first, legacyX-Trace-IDas deprecated fallback, otherwise a new W3C trace ID is generated. - New module
logtide-logback: a Logback appender (dev.logtide.sdk.logback.LogTideAppender) so existing SLF4J/Logback logging flows to LogTide via XML config or an injected shared client. MDC values become metadata and thetrace_idMDC key is promoted to the top-level trace id. HttpStatusExceptioncarrying the response status code.
Changed
- Breaking: exceptions passed to
error/criticalare now serialized under the canonicalmetadata.exceptionkey (wasmetadata.error), matching the platform's structured exception contract so server-side error grouping and fingerprinting work. - Auto-generated trace IDs are now 32-char lowercase-hex W3C IDs instead of UUIDs.
- Client errors (4xx except 408/429) are no longer retried.
- Removed the per-log "No trace ID provided" warning.
v0.9.0
Fixed
- Logs are now sent to
POST {apiUrl}/api/v1/ingestinstead ofPOST {apiUrl}.apiUrlis documented as the base URL of the instance, so with the documented configuration every batch was posted to the root path and ingestion failed. URLs that already include/api/v1/ingestkeep working (the path is not duplicated).
Upgrading is strongly recommended: on 0.8.x, ingestion did not work with the documented apiUrl configuration.