Releases: Husseinhj/LogTap
Releases · Husseinhj/LogTap
Release list
v0.15.0
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(defaultfalse). 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-Noopmirrors the newfilterSystemNoisefield for API parity.
v0.14.1
v0.14.0
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/5xxshorthand),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/infoshown in the toolbar brand. - PID/TID column in Table view and
pid-tidprefix in Logcat view (matchesadb 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 derivelevelfrom status (5xx→ERROR, 4xx→WARN, else INFO), solevel:ERRORreturns server errors as well as ERROR logs.exclude:message:searches across visible fields (url, body, status, etc.), not justmessage.- All command/panel filters are case-insensitive.
Backend
LogEventgainspidandtidfields.LogStore.addstampsProcess.myPid()automatically.- HTTP request/response events are paired client-side into a single row with both bodies and headers.
Bug fixes
LogTapInterceptornow reads the activeLogTap.Configinstead of constructing fresh defaults; user-suppliedredactHeadersandmaxBodyBytesare honored.LogStore.snapshot(sinceId, limit)now returns events newer thansinceId(was equality match).LogStore.streamconfigured withBufferOverflow.DROP_OLDEST; live events no longer silently dropped under load.- WebSocket handler in
server.ktnow collects on the session's coroutine scope; no leaked collectors on session abort. - Removed the legacy
LogTapEventsqueue; logger output and HTTP/WS events flow through a singleLogStore./logs(deprecated) removed; use/api/logs. LogTapSinkAdapterwrites to the activeLogStoreso/api/logsand/wsagree on contents.
v0.13.0
- 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
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/logsif store is null.
v0.11.1
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
Enable minification and add Proguard rules for LogTap
- Enable
isMinifyEnabledfor the release build type inLogTap/build.gradle.kts. - Add Proguard rules to
LogTap/proguard-rules.proto keep LogTap's public API, Ktor, OkHttp/Okio, Kotlin coroutines, Kotlinx serialization, and WebSocket message models.
v0.10.0
v0.9.0
v0.8.0
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.