All notable changes to AppLogger are documented in this file.
The format follows Keep a Changelog and the project adheres to Semantic Versioning.
- Exponential backoff with jitter — transport retries use
base * 2^attemptcapped at 30s. - Dead Letter Queue — events that exhaust retries are preserved for inspection.
- Health Check API —
AppLoggerHealth.snapshot()returns SDK internal state. - Certificate pinning support —
SupabaseTransportaccepts a customHttpClient. - KDoc — comprehensive English documentation on all 19 public API files.
- iOS distribution —
Package.swift(SPM) andAppLogger.podspec(CocoaPods). - XCFramework task in
sdk/logger-core/build.gradle.kts. - Dokka — API docs generation configured with CI upload.
- Conventional Commits — git hook enforcer in
.githooks/commit-msg. - CodeQL security scanning in CI workflow.
- Dependency submission to GitHub for vulnerability alerts.
- Detekt static analysis with SARIF reports.
- JaCoCo code coverage with Codecov integration.
- Dependabot for Gradle and GitHub Actions dependencies.
- ProGuard/R8 consumer rules for
logger-coreandlogger-transport-supabase. .editorconfigfor consistent code formatting.
AppLoggerinterface — unified logging contract for Kotlin (Android / JVM / iOS).LogTransportinterface — swappable transport abstraction (REST, gRPC, stdio).LogBufferinterface — temporary event storage with configurable overflow policy.LogFilterinterface — event filtering with chain-of-responsibility support.LogFormatterinterface —LogEventserialization (JSON implementation included).DeviceInfoProviderinterface — technical device metadata without PII.CrashHandlerinterface —UncaughtExceptioncapture with synchronous pre-death flush.AppLoggerImpl— core event pipeline withChannel<LogEvent>from Kotlin Coroutines.BatchProcessor— batch processor with size-based, time-based, and severity-based flush.RateLimitFilter— per-tag rate limiter with auto-bypass for ERROR and CRITICAL.NoOpLogger— empty implementation for pre-init state and tests.InMemoryLogger— test implementation with built-in assertions.FakeTransport— transport mock with success/failure control for tests.SupabaseTransport— Supabase (PostgreSQL) transport withanon keyauth via Ktor.PlatformDetector— automatic detection of ANDROID_MOBILE, ANDROID_TV, WEAR_OS, JVM.SqliteOfflineBuffer— persistent FIFO buffer in SQLite for offline operation on Android TV.AppLoggerLifecycleObserver— automatic flush when app backgrounds.AppLoggerConfig.Builder— typed configuration builder with adaptive defaults per platform.AppLoggerSDK— public entry singleton (Android), idempotent initialization.AppLoggerIos— public entry singleton (iOS), exported to Swift via KMP framework.logger-testmodule — testing utilities:NoOpTestLogger,InMemoryLogger,FakeTransport.- Privacy by design: no PII captured, ephemeral
session_id, optionaluser_idwith consent. - Crash handler chaining: SDK chains the previous handler, never replaces it.
- Mandatory TLS: builder rejects HTTP endpoints in production mode.
- Complete documentation:
docs/ES/desarrollo/,docs/ES/paquete/. - SQL migrations:
docs/ES/migraciones/001adocs/ES/migraciones/005for PostgreSQL / Supabase. - CI/CD with GitHub Actions: test workflows on PRs and automated release on tags.
- API keys never hardcoded: injected via
BuildConfigfromlocal.propertiesor CI env vars. - Row Level Security in Supabase:
anonrole only hasINSERTpermission onapp_logs. - Production endpoint requires
https://— validated atConfigbuild time.