The log view

Logsift with four filters combined, the timeline on top and the highlight bar on the right

From top to bottom, a log tab has:

Level colours

Lines are coloured by their level word. The first rule that matches wins:

Lines with Light mode Dark mode
ERROR, FATAL, SEVERE, CRITICAL dark red text on pink pink text on dark red
WARN, WARNING brown text on pale yellow yellow text on dark olive
Stack trace lines (at …, Caused by:, ... 5 more, SomeException: …) red text light red text
DEBUG, TRACE gray text gray text
INFO and others normal text normal text

In the plain view, only these words in capitals colour a line. A filter with a colour (see Filters) replaces the level colour on the lines it matches.

In the Columns view the row keeps these colours, and the Level cell is coloured too: red for errors, dark amber for warnings, gray for debug and trace. There, more spellings count: E, ERR, FTL, W, WRN, I, INF, D, DBG, T, TRC, NOTICE, FINE, FINER, FINEST and so on.

Grayed lines ( light gray, in dark mode) are lines your filters leave out, in All lines mode, and context lines around matches. They keep their place so you can see what is around a match.

Line numbers and marks

Selecting and copying

Drag to select (in a table, cells: see CSV files). Double-click selects a word; triple-click, or a click on the line number, the whole line. Shift+click extends. Ctrl+C copies (with nothing selected, the current line). Ctrl+A selects all.

Right-click a line for: Copy, Bookmark This Line, Follow its request ID, Open … in Editor (on a stack line), Show Thread “…” in Threads, Show Only Lines of Thread “…”, Open the Heap Dump (on an out-of-memory line); with text selected, Find All, Show / Hide / Mark lines with “…”. In the Columns view, right-click a value for Show Only Rows Where Host = web-1 and Hide Rows Where Host = web-1 (see Filters on a column).

The highlight bar

A narrow bar beside the scrollbar shows the whole file at a glance, in two lanes:

Click a mark to jump to its line; hover to see it. F8 / Shift+F8 go to the next or previous error. Only lines the view shows get marks.

The log’s bar

Left: Find (Ctrl+F), Filters (opens the Filters tab), Clear All (lit while anything is set: back to the whole log), the chips (see Filters) and Matching only.

Right: the count (1,234 of 50,000 lines), then:

Button Does
Format: …▾ How the lines are read, for example Format: CSV ▾ or Format: logback / log4j ▾. Click it to choose another format for this file (it is remembered), Plain text, New Format from This Log… or Edit Log Formats…. The same list is in View → Log Format. In a narrow window it shows just the name (CSV ▾); hover it for the whole name
Wrap Wrap long lines (Alt+Z, ⌥Z). A table (CSV, TSV) never wraps: it scrolls sideways, to its last column
Columns Show lines as columns (Ctrl+Shift+K)
Tree The tree of loggers (Ctrl+Shift+B)
Timeline Show or hide the timeline
Follow Follow the end of the file as it grows, like tail -f (Ctrl+T, or End)
Reload Load what changed in the file (F5). It turns into an amber pill, Reload (+1.23 MB) or Reload (file replaced), when the file changed
▾ Reload Automatically: load changes as they happen. Follow turns it on

These apply to this log, and your last choice becomes the default for the next log you open.

The status bar

Left: the file (or sftp user@host:/path, or the web address), its size, the number of lines and how fast it was indexed. Then, when it applies: • 1.2 MB more on disk: Reload (F5) to see it, • the file was replaced on disk, or the state of a remote connection (⚡ …). A blue button appears when a new version of Logsift is out.

Right: MATCHING ONLY, the line number (Ln 1,234), the current line’s time, FOLLOW, the text encoding, and the memory Logsift uses.

Columns

Columns (View → Columns, Ctrl+Shift+K) shows lines as columns: Time, Level, Thread, Logger, Message, or whatever the format has (host, process, status, …). Logsift knows logback and log4j, Spring Boot, Python logging, .NET’s Serilog ([ERR]), NLog (time|LEVEL|logger|message), log4net and ASP.NET Core’s console (fail: Category[event], the message on the next line), syslog, web access logs and JSON lines; levels written their own way (ERR, WRN, fail, crit) count as errors and warnings in Levels and everywhere else. Stack traces show under the message. A table (a CSV or TSV file) opens with Columns on. Turning them off in a table is remembered for tables, apart from logs. A title longer than its column is cut with “…”: hover it, or widen the column, to read all of it.

Parsed columns with top messages below

JSON logs

Logs with one JSON object per line are recognized. With Columns on, the usual fields become columns (@timestamp/timestamp/time/ts → Time, level/severity → Level, thread, logger, message/msg) and the rest go together in a Fields column as key=value.

JSON log shown as columns, with a pretty-printed details panel

The Details tab shows the current entry in full (a line with its stack trace), or just the text you selected. Its **Text JSON** switch pretty-prints the JSON in it, also JSON in the middle of a message and JSON written inside strings. JSON colours:
Part Light Dark
Keys (bold) blue light blue
Strings green light green
Numbers purple light purple
true, false, null orange light orange
{ } [ ] , : and text around the JSON gray gray

CSV files

A .csv or .tsv file is read as a table: the header row names the columns, and rows are split by comma, semicolon, tab or |, with quoted fields handled. Columns named like a time, level, thread, logger or message (timestamp, severity, msg…) are used as such: the timeline uses the time column, and levels colour the rows. Other columns appear in the tree beside the log. Other files are read as CSV when they clearly are one, or choose CSV in Format: …▾ in the log’s bar.

A quoted value may hold line breaks ("line one on one line, line two" on the next): the row is still one row, its cells shown on its first line and the lines it goes on over shown as they are, and Profile, Pivot, Values, Metrics, filters on a column and Query count it once. Rows of any length are read whole, so a table with thousands of columns has all of them, however long its rows (a line on screen shows the first 64 KB of a line; a table’s cells come from the whole row).

Exports with a title, totals or empty columns. A downloaded report often doesn’t start with its header: a title (Monthly sales report), a note (Exported:,2026-05-01) or a row of separators comes first. Logsift takes the first line that reads as a header (names, as many as the rows have values) within the first 20 lines; the lines above it show grayed and aren’t rows. Right-click a row for:

These are kept for the file. Empty columns (no value in any row: the extra separators some exports add at the end of each line) are hidden; the crossed-out eye at the left of the header lists them, marked (empty), to show them again. Tables over 512 MB aren’t read for empty columns.

The header and the rows needn’t have the same number of fields. Names can have spaces and values can be empty. A header can name a column that no row fills, such as an empty last column some exports add: it’s still a column, and it stays empty. A separator at the end of the header names nothing, so it adds no column. When rows have a value past the header’s last name, that value gets its own column, called column 5 for example. All of this works in Profile, Pivot, Values and Query.

A CSV file from inside a zip, shown as columns, with its hosts in the tree

The tree of loggers

Logs with a logger column (or class, component, thread, host…) can show a tree on the left (Tree, Ctrl+Shift+B). com.acme.db.Pool sits under com.acme › db, with line counts.

Bookmarks

Ctrl+F2 (⌘F2) bookmarks the current line, or right-click → Bookmark This Line. F2 / Shift+F2 go to the next or previous one. Bookmarks show as blue dots by the line number and on the highlight bar.

The Bookmarks tab lists them: Line, Time, Note (type a note there) and Text. Double-click to go there; Delete removes one. Bookmarks are remembered per file, and dropped when the file was truncated (the lines would have moved).

Merged logs

A log made with File → Merge Files by Time… starts each line with a label like <node2-app> and a coloured stripe at the far left. See Compare and merge. CSV files merge into one CSV with a Source column instead: see Merge CSV files.

Text encodings

Logsift detects UTF-8 (with or without a byte order mark), UTF-16, and Windows-1252. The status bar shows the encoding. View → Encoding reopens the log in another one (Latin-1, Cyrillic, Shift_JIS, GB18030 and more). The encoding for text that isn’t UTF-8 is set in Settings.

Font and dark mode

Ctrl+= / Ctrl+- change the font size; View → Dark Mode switches the theme. The font itself is in Settings.

Dark mode