Skip to content

Releases: logtide-dev/logtide-kotlin-java

v0.9.8

Choose a tag to compare

@Polliog Polliog released this 11 Jun 12:23

Added

  • TraceparentInterceptor: OkHttp interceptor injecting the W3C traceparent header on outbound requests (active OTel span, then scope trace context; no-op otherwise).
  • Scope.traceContext() getter.

v0.9.7

Choose a tag to compare

@Polliog Polliog released this 11 Jun 12:09

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) with service.name/deployment.environment/service.version resource identity and a parent-based tracesSampleRate sampler.
  • Active-span log correlation: entries captured inside an active OTel span automatically carry its trace_id/span_id (ActiveTraceContext pluggable lookup in core).

v0.9.6

Choose a tag to compare

@Polliog Polliog released this 11 Jun 11:48

Added

  • LogTideClientOptions.beforeSend: hook called before buffering — mutate the entry or return null to drop it. A raising hook never loses the entry.
  • LogTideClientOptions.sampleRate (0.0–1.0, default 1.0): per-entry sampling applied after beforeSend.

v0.9.5

Choose a tag to compare

@Polliog Polliog released this 11 Jun 11:25

Changed

  • A Retry-After header on retryable responses now overrides the computed backoff delay (HttpStatusException.retryAfterMs).

v0.9.4

Choose a tag to compare

@Polliog Polliog released this 11 Jun 09:15

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

Choose a tag to compare

@Polliog Polliog released this 11 Jun 08:08

Added

  • Scope API: per-request/per-task context — Scope, ScopeContext, withScope { }, coroutine-safe withScopeSuspend { }, LogTideUser, Breadcrumb. Scope state (tags, extras, user, breadcrumbs ring buffer, session, trace context) is merged into every captured entry; entry-level values win.
  • LogEntry.spanId and LogEntry.sessionId, serialized as top-level span_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

Choose a tag to compare

@Polliog Polliog released this 11 Jun 06:59

Added

  • DSN support: LogTideClientOptions.fromDsn("https://lp_key@host[/path]") { ... } plus Dsn.parse and DsnParseException. 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-provided sdk key wins).

v0.9.1

Choose a tag to compare

@Polliog Polliog released this 11 Jun 06:26

Added

  • W3C Trace Context support: TraceContext with parseTraceparent, formatTraceparent, generateTraceId, generateSpanId, resolveTraceId.
  • Spring, Ktor and Jakarta integrations now resolve the inbound trace context per the W3C spec: traceparent header first, legacy X-Trace-ID as 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 the trace_id MDC key is promoted to the top-level trace id.
  • HttpStatusException carrying the response status code.

Changed

  • Breaking: exceptions passed to error/critical are now serialized under the canonical metadata.exception key (was metadata.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

Choose a tag to compare

@Polliog Polliog released this 11 Jun 04:47

Fixed

  • Logs are now sent to POST {apiUrl}/api/v1/ingest instead of POST {apiUrl}. apiUrl is 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/ingest keep working (the path is not duplicated).

Upgrading is strongly recommended: on 0.8.x, ingestion did not work with the documented apiUrl configuration.

v0.8.4

Choose a tag to compare

@Polliog Polliog released this 30 Mar 14:19

Fixed

  • Fix signing environment variables for Maven Central publishing
  • Fix preprocessPrivateGpgKey function for proper PGP armor handling
  • printVersion Gradle task now correctly reads version from gradle.properties