Skip to content

v0.16.0 — Multi-line Records, Row Export, and Session Bundles

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Aug 13:26
· 9 commits to main since this release
45df309

v0.16.0 makes complex logs easier to investigate and share. It adds multi-line record parsing, export of the current table view, and portable session bundles.

What's new

Multi-line records

Stack traces, continuation frames, and indented follow-up lines can now be grouped with their original log entry. A Java stack trace, Python traceback, Google glog record, or multi-line logfmt message therefore appears as one row instead of several disconnected lines.

  • The complete record is available in the message cell, the Record Details panel, and copied text.
  • Eleven built-in regex templates support multi-line records, including Java/Logback, PostgreSQL, Google glog, Rust env_logger, Rails, and Uber Zap.
  • Logfmt groups indented continuation lines by default.
  • JSON Lines and CSV remain strictly line-based.
  • Custom regex templates can use Indented or Until next header continuation modes under Settings → Regex Templates…. Optional header anchors provide faster header detection and are validated before saving.

Multi-line records work in both static files and live streams, including records that cross internal parsing batches.

Export filtered or selected rows (Ctrl+E)

Use File → Export Filtered Rows… to export the current filtered and sorted view. You can export all visible rows or only the selected rows, in the same order shown in the table.

Available formats:

  • JSON Lines (.jsonl), preserving native value types and precise UTC timestamps
  • CSV (.csv), with RFC 4180 quoting and protection against spreadsheet formula injection
  • Source snapshot (.log), preserving the original bytes, including multi-line records
  • Markdown table (.md)

Exports run in the background and can be cancelled. Files are written through a temporary file and replaced atomically, so a cancelled or failed export does not leave an incomplete destination file.

Portable session bundles (Ctrl+Shift+E)

Use File → Export Session Bundle… to create a portable .slvbundle containing:

  • every retained log row;
  • columns, filters, and sort order;
  • anchors and notes; and
  • highlight rules.

Recipients can open the bundle through File → Open…, drag and drop, the command line, Recent Sessions, or session restore. The investigation view is reconstructed, including remapped anchors.

Bundles use a standard checksummed zstd stream. They can also be unpacked outside the application:

zstd -d bundle.slvbundle -o bundle.jsonl

The resulting JSON Lines file can be inspected with jq or other text-processing tools.

Reliability and platform improvements

  • Export writers now use exclusive temporary files, durable flushes, and atomic replacement. Error messages identify common causes such as another application holding the destination file open, insufficient permissions, or interference from antivirus and sync software.
  • Windows paths containing non-ASCII characters, such as C:\Users\Jörg\…, now work correctly for exports and decompressed temporary files.
  • Bundle detection and validation now handle standard zstd layouts more reliably. Malformed or unsupported bundles produce specific, actionable errors.
  • Bundle configuration is applied only to the matching empty session, preventing queued opens from applying the wrong configuration.
  • Anchor lookup scales with the number of anchors rather than the number of rows. Ambiguous matches are discarded instead of being attached to the wrong row.
  • The glaze dependency was updated from v7.9.1 to v8.0.0, simdjson from v4.6.5 to v4.6.6, and several GitHub Actions dependencies received patch updates.
  • The Python-traceback header-anchor benchmark now uses the same best-of-N sampling method as the other hard performance gates, reducing failures caused by host scheduling noise.

Developer notes

  • Multi-line handling is shared by the static and streaming parser pipelines. Parsers that do not support continuations retain their existing single-line path.
  • The row-export API is Qt-independent and can be reused by the planned headless slv CLI.
  • loglib adds public APIs for continuation modes, multi-line record registration, session-bundle writing and reading, cancellation, and bundle validation. Existing LogParser, ParseFile, and streaming-pipeline APIs remain compatible.
  • This release adds no new bundled runtime dependencies.

Compatibility

  • Existing template and session JSON files continue to load in v0.16.0. New continuationMode, headerAnchor, and multilineLogfmt settings use safe defaults when absent.
  • If a configuration saved by v0.16.0 is opened and resaved in v0.15, v0.15 discards the new multi-line template settings and reverts those templates to single-line behaviour. Other session state remains intact.
  • .slvbundle is a new v0.16.0 format. For handoff to v0.15, unpack the bundle with zstd and open the resulting .jsonl file.
  • Logfmt now groups indented continuation lines by default. Set multilineLogfmt = false in the source dialog's advanced parser options to restore one-row-per-line behaviour.
  • New shortcuts: Ctrl+E exports filtered rows, and Ctrl+Shift+E exports a session bundle.

Full changelog: v0.15.0...v0.16.0