logana
Features
Formats & input
- Auto-detected log formats — JSON, syslog, journalctl, logfmt, OpenTelemetry, DLT (AUTOSAR), and more
- Compressed & archive files — open
.gz,.bz2,.xz,.zip,.tar,.tar.gz/.tgz,.tar.bz2/.tbz2, and.tar.xz/.txzdirectly; no manual extraction needed - OTel collector — receive OpenTelemetry logs in real time over gRPC or HTTP/JSON; compatible with any OTel SDK
- Multi-tab — open multiple files, Docker streams, DLT daemon connections, or OTel collector tabs
Filtering & search
- Filtering — include/exclude patterns (literal or regex), date-range filters, field-scoped filters; add filters from the command line with
-i/-o/-t - Headless mode — run the full filter pipeline without a TUI to preprocess huge logs
- Structured field view — parsed timestamps, levels, targets, and extra fields displayed in columns
Navigation
- Vim-style navigation —
j/k,gg/G,Ctrl+d/u, count prefixes (5j,10G),/search - Error/warning navigation — jump directly to the next/previous error or warning with
e/w - Mouse support — click to select, scroll to navigate
- Value coloring — HTTP methods, status codes, IP addresses, and UUIDs colored automatically
Analysis & integrations
- Persistent sessions — filters, scroll position, marks, and annotations survive across runs; configurable restore policy (ask / always / never)
- Annotations — attach comments to log lines; export analysis to Markdown or Jira
- MCP server — embedded Model Context Protocol server; expose marks and annotations to AI assistants
- Fully configurable — all keybindings remappable via a config file
Installation
Pre-built binaries (recommended)
Download from the Releases page, or use the install script:
Linux / macOS
|
Windows (PowerShell)
irm https://github.com/pauloremoli/logana/releases/latest/download/logana-installer.ps1 | iex
Homebrew (macOS / Linux)
&&
Cargo
# or install the latest binary directly
Performance
Benchmarked against lnav filtering a 3.3 GB web server access log with 10 million+ lines, cold disk cache.
Headless mode — 10 runs
logana
hyperfine --prepare 'rm filtered.log;sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' 'logana ~/logs/access.log -i food --headless > filtered.log' --runs 10
Benchmark 1: logana ~/logs/access.log -i food --headless > filtered.log
Time (mean ± σ): 994.1 ms ± 6.2 ms [User: 2629.3 ms, System: 3059.8 ms]
Range (min … max): 982.6 ms … 1003.6 ms 10 runs
lnav
$ hyperfine --prepare 'rm filtered.log;sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' \
'lnav ~/logs/access.log -c ":filter-in food" -n > filtered.log' --runs 10
Benchmark 1: lnav ~/logs/access.log -c ":filter-in food" -n > filtered.log
Time (mean ± σ): 11.197 s ± 0.140 s [User: 14.177 s, System: 1.580 s]
Range (min … max): 10.980 s … 11.483 s 10 runs
logana filters 3.3 GB / 10M+ lines in under 1 second — 11× faster than lnav.
TUI — filter on launch, quit when ready
$ time logana ~/logs/access.log -i food
logana ~/logs/access.log -i food 4.70s user 3.01s system 421% cpu 1.827 total
$ time lnav ~/logs/access.log -c ":filter-in food"
lnav ~/logs/access.log -c ":filter-in food" 12.14s user 1.37s system 114% cpu 11.819 total
logana opens, filters, and renders the full TUI in 1.8 s — 6.5× faster than lnav end-to-end.
Note: lnav provides additional features beyond filtering that may account for part of the difference. This comparison covers filtering performance only.
Hardware: AMD Ryzen 9 8945HS · 32 GB DDR5 5600 MHz · PCIe NVMe 4.0 x4
Quick Start
# Open a file
# Open a directory (each file opens in its own tab)
# Open a compressed or archive file directly
# Pipe from stdin
|
# Start at the end and follow new lines
# Stream a Docker container
# Receive OpenTelemetry logs over gRPC (port 4317)
# Add inline filters on the command line
# Headless — filter without the TUI, output to stdout or a file
Documentation
Full documentation is at pauloremoli.github.io/logana.