Skip to content

Releases: logtide-dev/logtide-php

v0.7.4

14 Apr 11:24

Choose a tag to compare

Fixed

  • Fixed Options::$service being silently ignored for any log captured without an explicit per-call service. Client::prepareEvent used $event->getService() ?: $this->options->getService(), but Event::__construct defaults $service to the string 'unknown', which is truthy — so the Elvis operator never fell through to the option. As a result, calls like LogtideSdk::init(['service' => 'my-php-app']) followed by captureLog(...) always shipped service: "unknown". The fallback now triggers when the event service is '' or 'unknown'. Closes #7.

Full Changelog: https://github.com/logtide-dev/logtide-php/blob/main/CHANGELOG.md

v0.7.3

07 Apr 12:02

Choose a tag to compare

Fixed

  • Fixed Event::$time formatting that produced ISO 8601 with a numeric offset (e.g. 2026-04-07T11:34:24+00:00) via format('c'). Logtide's backend uses Zod's strict z.string().datetime(), which only accepts ISO 8601 ending in Z, so every captureLog(...) call was rejected with HTTP 400 "Validation error". The SDK now emits UTC ISO 8601 with a Z suffix (2026-04-07T11:34:24.886Z). Closes logtide-dev/logtide#180.
  • Fixed empty metadata field being serialized as JSON array [] instead of object {}. The backend schema is metadata: z.record(z.unknown()).optional(), which rejects arrays with "Expected object, received array". Default captureLog(...) calls without any metadata now serialize metadata as an empty JSON object via \stdClass, so the first-time-user happy path validates cleanly.
  • Fixed OTLP startTimeUnixNano, endTimeUnixNano, and span event timeUnixNano being emitted in scientific notation (e.g. "1.7755623882398E+18") due to a naive (string) ($float * 1e9) cast. OTLP requires a digit-only stringified uint64. The SDK now uses sprintf('%.0f', ...) to emit a fixed-point integer string.

Full Changelog: https://github.com/logtide-dev/logtide-php/blob/main/CHANGELOG.md

v0.7.2

19 Mar 20:55

Choose a tag to compare

Bug Fixes

  • Fixed ErrorListenerIntegration closure return type — kept : bool to satisfy set_error_handler contract, and cast previous handler result with (bool) to safely handle null returns from chained handlers. Closes #6.
  • Fixed beforeSend PHPDoc callable shape: second parameter corrected from array<string, mixed> to EventHint|null to match actual call site.
  • Added typed callable shapes via PHPDoc to Options::$beforeSend, Options::$beforeBreadcrumb, and Options::$integrations for PHPStan validation.
  • Tightened Scope event processor arrays from callable[] to array<callable(Event): ?Event>.

v0.7.1

19 Mar 19:45

Choose a tag to compare

Bug Fixes

  • Fixed ^0.1 version constraint on logtide/logtide in all integration packages — Composer treats ^0.1 as >=0.1.0 <0.2.0, so v0.7.0 was not installable. Constraint updated to ^0.7 in logtide-laravel, logtide-symfony, logtide-slim, and logtide-wordpress. Closes #5.

v0.7.0

06 Mar 21:00
6c46529

Choose a tag to compare

Added

Monorepo Structure

  • Restructured as Composer monorepo with 5 packages under packages/*
  • Unified test suite with PHPUnit 10.5 (265 tests, 570 assertions)
  • PHPStan level 8 static analysis across all packages
  • PSR-12 code style enforcement with PHP_CodeSniffer

Core (logtide/logtide)

  • LogtideSdk - static entry point for SDK initialization
  • ClientBuilder - fluent client construction with sensible defaults
  • Client - capture logs, errors, breadcrumbs, and spans
  • Hub - global singleton for convenient access across your app
  • Scope - per-request context isolation with tags, extras, and breadcrumbs
  • BatchTransport - automatic batching with retry logic and circuit breaker
  • HttpTransport and OtlpHttpTransport for log and span delivery
  • CurlHttpClient and GuzzleHttpClient HTTP client implementations
  • DSN parsing, error serialization, trace ID generation
  • W3C Trace Context (traceparent) propagation
  • Breadcrumb buffer with configurable max size
  • Monolog handlers: LogtideHandler and BreadcrumbHandler
  • PSR-15 middleware for generic HTTP request tracing
  • Global helper functions (\LogTide\init(), \LogTide\captureException(), etc.)
  • Built-in integrations: Request, Environment, ExceptionListener, ErrorListener, FatalErrorListener

Laravel (logtide/logtide-laravel)

  • LogtideServiceProvider with auto-discovery and publishable config
  • LogtideMiddleware for automatic request tracing
  • LogChannel for Laravel logging integration
  • LogtideFacade for static access
  • Breadcrumb integrations: DB queries, cache operations, queue jobs

Symfony (logtide/logtide-symfony)

  • LogtideBundle with DI extension and semantic configuration
  • RequestSubscriber for automatic HTTP request tracing
  • ConsoleSubscriber for CLI command tracing
  • SymfonyIntegration and DoctrineIntegration for breadcrumbs

Slim (logtide/logtide-slim)

  • LogtideMiddleware - PSR-15 middleware for request tracing
  • LogtideErrorMiddleware - error capture with full request context
  • Automatic route pattern resolution from Slim routing

WordPress (logtide/logtide-wordpress)

  • LogtideWordPress - static initializer with WordPress hook registration
  • Lifecycle hooks: wp_loaded, shutdown, wp_die_handler, wp_redirect, wp_mail
  • WordPressIntegration - PHP error handler integration
  • DatabaseIntegration - slow query breadcrumbs via $wpdb
  • HttpApiIntegration - outgoing HTTP request breadcrumbs
  • Multisite support (blog switch tracking, plugin activation/deactivation)

CI/CD

  • GitHub Actions CI: PHPUnit tests, PHPStan, PHPCS on push/PR to main/develop
  • GitHub Actions publish: Packagist publish on tag v*.*.* or manual dispatch
  • PHP version matrix: 8.1, 8.2, 8.3, 8.4
  • Branch model: developmain, hotfix directly to main

Documentation

  • README for every package with badges, quick start, API reference
  • Root README with package table, architecture diagram, development guide
  • Contributing guide, Code of Conduct, Changelog
  • Branch protection documentation (.github/BRANCH_PROTECTION.md)