Multi-Tab
logana supports multiple tabs, each showing an independent log file, directory, stdin stream, or Docker container.
Tab Keybindings
| Key | Action |
|---|---|
Tab | Switch to next tab |
Shift+Tab | Switch to previous tab |
Ctrl+t | Open a new (empty) tab |
Ctrl+w | Close the current tab |
Ctrl+p | Open a searchable popup to switch between open files |
A tab can also be clicked directly in the tab bar to switch to it.
The GUI uses these same keybindings.global settings. In the GUI, Ctrl+t
opens the file selection window. There are no fixed Ctrl+O or Ctrl+Tab aliases;
set global.new_tab, global.next_tab, or global.prev_tab to your preferred
shortcuts. See GUI shortcuts.
Opening Files in Tabs
From the command line, each file argument opens in its own tab; a directory argument opens every file inside it (including files inside any archives found there), each in its own tab. A file argument can also be a glob pattern, which opens every match, each in its own tab:
logana app.log system.log # two tabs, one per file
logana /var/log/ # opens every file under /var/log, each in its own tab
logana '/var/log/system.log*' # opens system.log, system.log.1, system.log.2.gz, ... each in its own tab
Quote a glob pattern so the shell passes it through as-is; an unquoted pattern is expanded by the shell first, which works the same way.
If a file that actually exists on disk happens to have *, ?, or [ in its name, its literal name always takes priority over the glob interpretation — so logana 'weird[1].log' opens that exact file rather than being parsed as the character class [1].
From within logana, use the :open command:
:open app.log # opens in a new tab
:open /var/log/ # opens every file under /var/log, each in its own tab
:open /var/log/system.log* # opens every matching file, each in its own tab
To choose which files to open instead of opening everything, use :file-picker on a directory or archive:
:file-picker /var/log # shows a picker — pick which files to open, each in its own tab
:file-picker logs.tar.gz # same picker, for an archive's contents
Tab State
Each tab maintains completely independent state:
- Scroll position and viewport
- Active filters (with their colors and enabled/disabled states)
- Search query
- Marks and annotations
- Detected log format
- Field layout (visible columns and order)
- Display flags (wrap, sidebar, tail mode, show-keys)
Session Restore
When you close logana and reopen it without arguments, it prompts to restore the previous session — reopening all tabs that were open at exit, with their per-tab state restored. Docker tabs are re-attached by container name.
Merged View
:merge opens a source-selection popup where you can choose any combination of open tabs. Confirming creates a new merged(N) tab that interleaves all selected sources sorted by timestamp — no data is copied.
:merge # open source-selection popup
In the merged tab each line is prefixed with the title of the tab it came from.
The merged tab stays live: as the source tabs receive new lines, the merged index is extended and re-sorted automatically. You can pause or stop updates with the usual commands:
:pause # pause live updates for the merged tab
:resume # resume live updates
:stop # stop live updates permanently for the merged tab
Filters, search, marks, and annotations all work the same as on any other tab.
Files inside a .zip/.tar.gz/etc archive can be merged directly without opening them as separate tabs first — mark them with m in the archive picker instead of Space. See Opening Compressed and Archive Files. Unlike this live merged(N) tab, an archive-picker merge is a one-shot snapshot of the extracted files (there’s no live source tab to poll for new lines).
Tail Mode Per Tab
Each tab can independently have tail mode enabled or disabled:
:tail # toggle tail mode for the current tab
When tail is active for a tab, [TAIL] appears in that tab’s log panel title.