twilight ventures

log lens for vs code

Open VSXVisual Studio Marketplacefree viewer, Pro by subscription

Install from Open VSXInstall from the Visual Studio Marketplacefree to read; the Pro trial runs 30 days on each machine

The log goes on for miles in the editor. Take the rope into VS Code. What stays in memory is the index of offsets, not the miles of text, and a line is read off the disk when you scroll to it.

Log Lens is the third extension we have built for VS Code; JSONL Lens and Parquet Lens came first. It opens a .log file in the editor. The rotated .log.1 to .log.N files of a set open the same way, and so does a .log.gz. Lines are indexed by byte offset in one pass, so a multi-gigabyte log is on screen while its index builds.

ERROR, WARN, INFO, DEBUG and TRACE are read from each line and counted over the whole file. The count is a second pass that begins once the index is complete, and the chips wait for it. A chip per level narrows the grid to that level. The file's first 64 lines decide its format. JSON lines and logfmt are recognized there with nothing to configure, and anything else reads as plain text. The ANSI escape codes a container log carries are stripped from the grid and painted in the line detail.

Reading is free: the grid, the chips, the search box in the grid with regular expressions and the line detail. Pro, a subscription shared with JSONL Lens and Parquet Lens for VS Code, adds whole-file filter queries, export to .log, JSONL or CSV, log statistics and grid themes. It is on from the first open, since each machine gets a 30-day trial with no key to enter.

opens
.log, .out and .err files, rotated .log.N files with a suffix of up to nine digits, and the .gz form of each; a .txt file stays with the text editor
runs on
VS Code 1.90 and every later release, with no upper bound; the Open VSX build serves VSCodium and the other editors that use that gallery
stores
Open VSX and the Visual Studio Marketplace
newest version
0.2.15, published 2026-10-17 on both stores
pro
one subscription from Polar, one key for the three extensions; a 30-day trial on each machine first

free

  • Any size: a line index built in one pass with live progress; browse lines while indexing runs
  • Follow the end: switch follow on and the file is read as it grows; each new line is indexed and given its level as it lands, the counts and the chips keep up, and the grid stays at the last line; a file cut back or replaced by a shorter one stops follow with a sentence saying so
  • Log levels: ERROR, WARN, INFO, DEBUG and TRACE read from each line and counted over the whole file; a chip per level narrows the grid to that level
  • Formats: JSON lines and logfmt recognized from a sample of the file, plain text otherwise; the level, the time and the message read under all three
  • ANSI: the escape codes in a container or CI log stripped from the grid and painted as colors in the line detail
  • Compressed and rotated: a .log.gz unpacked once to a temp file that goes with the tab; app.log.1 and the rest of a rotated set open like any log
  • Encodings: the first 64 KB decide how the file is read; UTF-8 is read in place, and UTF-16 with a byte order mark, EUC-KR, Shift_JIS, EUC-JP, GB18030, Windows-1250, ISO-8859-2, CP852, Windows-1252, Windows-1254 and Windows-1251 are recognized from their bytes and decoded once to a UTF-8 copy, which the grid, find and the exports then read; the statistics tab names the encoding
  • Find in file: full-text search or a regular expression tested against each line, a case toggle, next and previous, and matches only to page through the hits alone
  • Go to row: type a line number, Enter, and the grid is there (Ctrl+G for the box)
  • Line detail: the selected line whole, a JSON line pretty-printed, an ANSI line in its colors, copied in one click
  • Statistics tab: the level counts over the whole file and the file's shape; the time span and the activity histogram wait behind the Pro full scan
  • Reads in place: a plain UTF-8 file is used where it lies, never copied or converted; the index is thrown away when the tab closes
  • Private by construction: no account, no telemetry; the free viewer makes no network calls

pro

  • Whole-file filter queries: $level == "ERROR" && $message contains "timeout", tested against every line in the file, the parsed fields of a JSON or logfmt line included; the grid becomes the matching set
  • Export: all lines, the lines in view under the level chips and the filter, or the search matches, to .log, JSONL or CSV, with a cancellable progress bar, never over the source file
  • Log statistics: the full scan of the statistics tab: the first and the last timestamp in the file, the span between them and a histogram of lines across it, with the undated lines counted apart
  • Themes: twelve looks for the grid, each tuned for light and dark editors; trying one is free for the window, keeping it is Pro

price, as the store shows it

$4.90 a month or $49 a year personal, $9.90 a month or $99 a year business: one key for all three extensions, and Pro stays on in every build while the subscription runs. a personal key activates on up to 3 machines, a business key on 10, all three extensions on each (each extension on each machine is one activation: 9 on the personal key, 30 on the business key); release a machine from the Polar customer portal. when the subscription ends, Polar revokes the key and Pro turns off at the extension's next check, about once a week; the free viewer stays.

the key

one Lens Pro key covers Log Lens, JSONL Lens and Parquet Lens for VS Code, but the three do not pass the key between them. paste it into each one you use; Remove license key in that extension releases it again.

The keys are sold through Polar as a personal key or a business key, and the same key serves the other two Lens extensions for VS Code. The price is on the Lens Pro page.

Pasting a key under Enter license key is one activation call to Polar, a license check follows about once a week after that, and answering Remove license key with Release and remove is one release call; Remove only skips it. While Polar cannot be reached, the check is tried again at every start and once a day. The trial needs no call, and a filter query works on the file on your disk and stops there. Get Lens Pro hands the checkout to your browser, and Write a review does the same with the store page.

where it stops

what's new

more

Pricing, invoices and licensing questions go to sales@twilightventures.dev; anything else about the product to support@twilightventures.dev.