Skip to content

Releases: Husseinhj/LogTap

v0.15.0

Choose a tag to compare

@Husseinhj Husseinhj released this 21 May 14:33

v0.15.0

Web viewer responsiveness during fast streams + logcat spam filter

UI

  • Pause the live log DOM rebuild while the user has an active text selection inside the log area. Selecting log text during a busy stream no longer collapses mid-drag; the deferred refresh fires once the selection clears.
  • Pause the live log DOM rebuild during active scroll, touch, and pointer gestures inside .main. Wheel/touch/scrollbar gestures are no longer hijacked by the per-event rebuild during fast streams. A single armed timer flushes once the user is idle (~250 ms).
  • Preserve scroll position across rebuilds: stick to the bottom when auto-scroll is on or the user was already at the tail; otherwise restore the previous scroll offset.

Library

  • New LogTap.Config.filterSystemNoise (default false). When enabled, the logcat bridge drops repeats of known chatty system tags (View setRequestedFrameRate, VRI[…] ViewPostIme, Choreographer Skipped, OpenGLRenderer Davey, BufferQueueProducer, ViewRootImpl ViewPostIme). The first match per pattern is emitted with a [LogTap] spam sample… marker; subsequent matches are silently dropped.
  • LogTap-Noop mirrors the new filterSystemNoise field for API parity.

v0.14.1

Choose a tag to compare

@Husseinhj Husseinhj released this 05 May 14:18
v0.14.1

v0.14.0

Choose a tag to compare

@Husseinhj Husseinhj released this 05 May 14:11

v0.14.0

Modern viewer redesign + correctness fixes

UI

  • Rewrite web viewer (Resources.kt) with a modern, theme-aware UX based on the LogTap Viewer design.
  • Smart command-search with autocomplete: level:, method:, status: (incl. 2xx/4xx/5xx shorthand), exclude:tag:, exclude:message:, exclude:method:, exclude:status:. Keyboard navigation (↑/↓/Enter/Tab/Esc).
  • One-click favorites (☆/★) save the current query; saved-filters popover with badge count, click to apply, delete to remove. Persisted to localStorage.
  • Four themes (Android Studio, Xcode, Grafana, Modern) × dark/light mode. Persisted to localStorage.
  • Always-visible metrics (Total / Network / Logs / Errors / Logs/min / Avg Response / Active Filters).
  • Two view modes: Logcat (Android Studio-style stream with inline request/response/headers) and Table (resizable columns, expandable rows, request body under URL, response preview column).
  • Right-click context menu on any row: Copy URL / Copy as cURL / Copy Message / Copy as JSON / Exclude tag / Exclude message.
  • Smart auto-scroll (off when scrolled up, resumes at bottom). Connection status indicator in status bar with auto-reconnect.
  • App icon, name, version, and build number from /api/info shown in the toolbar brand.
  • PID/TID column in Table view and pid-tid prefix in Logcat view (matches adb logcat -v threadtime).
  • Cmd/Ctrl+K focuses search; Esc closes popovers. High-contrast text selection across themes.

Filtering logic

  • level: matches both logs and HTTP rows. HTTP rows now derive level from status (5xx→ERROR, 4xx→WARN, else INFO), so level:ERROR returns server errors as well as ERROR logs.
  • exclude:message: searches across visible fields (url, body, status, etc.), not just message.
  • All command/panel filters are case-insensitive.

Backend

  • LogEvent gains pid and tid fields. LogStore.add stamps Process.myPid() automatically.
  • HTTP request/response events are paired client-side into a single row with both bodies and headers.

Bug fixes

  • LogTapInterceptor now reads the active LogTap.Config instead of constructing fresh defaults; user-supplied redactHeaders and maxBodyBytes are honored.
  • LogStore.snapshot(sinceId, limit) now returns events newer than sinceId (was equality match).
  • LogStore.stream configured with BufferOverflow.DROP_OLDEST; live events no longer silently dropped under load.
  • WebSocket handler in server.kt now collects on the session's coroutine scope; no leaked collectors on session abort.
  • Removed the legacy LogTapEvents queue; logger output and HTTP/WS events flow through a single LogStore. /logs (deprecated) removed; use /api/logs.
  • LogTapSinkAdapter writes to the active LogStore so /api/logs and /ws agree on contents.

v0.13.0

Choose a tag to compare

@Husseinhj Husseinhj released this 09 Sep 08:12
  • Add DeviceAppInfo support and update UI with dynamic app details
  • Add settings popover for UI customization options
  • Refactor settings and filters popover for improved UI and accessibility
  • Update stats bar styling for stickiness and visual consistency
  • Enhance export menu UI with improved accessibility and dynamic behavior

v0.11.2

Choose a tag to compare

@Husseinhj Husseinhj released this 08 Sep 11:22

Make LogStore nullable and handle potential null access

  • Update LogTap.store to be nullable.
  • Add null-safe calls (?.) when accessing LogTap.store in WsLogging.kt, Interceptor.kt, server.kt, and LoggingWebSocket.kt.
  • In server.kt, provide an empty list for /api/logs if store is null.

v0.11.1

Choose a tag to compare

@Husseinhj Husseinhj released this 08 Sep 09:55

Enable resource shrinking and minification in release build; update Proguard rules
If you need to use it for release builds, make sure add these to your proguard rules:

-keep class com.github.husseinhj.logtap.** { *; }
-keep class io.ktor.** { *; }
-dontwarn io.ktor.**
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn kotlinx.coroutines.**
-keepclassmembers class ** { @kotlinx.serialization.SerialName *; }
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod, Exceptions, SourceFile, LineNumberTable

v0.11.0

Choose a tag to compare

@Husseinhj Husseinhj released this 08 Sep 08:47

Enable minification and add Proguard rules for LogTap

  • Enable isMinifyEnabled for the release build type in LogTap/build.gradle.kts.
  • Add Proguard rules to LogTap/proguard-rules.pro to keep LogTap's public API, Ktor, OkHttp/Okio, Kotlin coroutines, Kotlinx serialization, and WebSocket message models.

v0.10.0

Choose a tag to compare

@Husseinhj Husseinhj released this 08 Sep 08:09

Expose the LogTap server address and display it in the sample app

  • Introduce LogTap.resolvedAddress as a StateFlow to observe the server address.
  • Update the sample app to display the resolved server address.

v0.9.0

Choose a tag to compare

@Husseinhj Husseinhj released this 07 Sep 17:27

Fix GitHub links in Resources.kt to point to the correct repository

v0.8.0

Choose a tag to compare

@Husseinhj Husseinhj released this 07 Sep 17:21

Refactor LogTap UI and functionality

  • Update repository URL from LogTap to LogTapIOS.
  • Implement resizable and persistable table columns.
  • Change the default for "Pretty JSON" to enabled.
  • Default "Actions" column to hidden.
  • Improve log message display and parsing.
  • Minor style adjustments for table padding and layout.
  • Switch sample app dependency from LogTap-Noop to LogTap.