logana
A fast terminal log viewer for files of any size — including multi-GB logs. Built on SIMD-accelerated line indexing, search, and filtering. Auto-detects log formats, filters by pattern, regex, field value, or date range — bookmark lines, add annotations, and export your analysis.
Performance
Headless mode
Benchmarked against lnav with headless mode filtering a 3.3 GB web server access log with 10 million+ lines, with a cold disk cache, measured on 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 ± σ): 999.9 ms ± 2.9 ms [User: 2277.7 ms, System: 3057.0 ms]
Range (min … max): 995.2 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 is ~11× faster than lnav.
The headless mode was used for more reliable measurements.
TUI
Same 3.3GB file with the TUI (filter passed as command argument, quit once data was fully loaded and filter applied):
$ time logana ~/logs/access.log -i food
logana ~/logs/access.log -i food 5.21s user 3.61s system 197% cpu 4.475 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
~2.6× faster end-to-end with the UI.
Hardware: AMD Ryzen 9 8945HS · 32 GB DDR5 5600 MHz · PCIe NVMe 4.0 x4
Note: lnav is a mature tool with a significantly broader feature set.
Features
- Auto-detected log formats — JSON, syslog, journalctl, logfmt, OpenTelemetry, DLT (AUTOSAR), and more
- Filtering — include/exclude patterns (literal or regex), date-range filters, field-scoped filters; add filters from the command line with
-i/-o/-t - Persistent sessions — filters, scroll position, marks, and annotations survive across runs; configurable restore policy (ask / always / never)
- Structured field view — parsed timestamps, levels, targets, and extra fields displayed in columns; select which columns you want visible
- Vim-style navigation —
j/k,gg/G,Ctrl+d/u, count prefixes (5j,10G),/search,e/werror/warning jumps - Annotations — attach comments to log lines; export analysis to Markdown or Jira
- Value coloring — HTTP methods, status codes, IP addresses, and UUIDs colored automatically
- 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; each tab has independent filters and session state
- MCP server — embedded Model Context Protocol server; expose marks and annotations to AI assistants
- Headless mode — run the full filter pipeline without a TUI to preprocess huge logs
- 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
Quick Start
# Open a file
# Open a directory (each file opens in its own tab)
# 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.