Unreal Log Analyzer (VSCode Extension)
Analyze large Unreal Engine .log files directly inside VSCode, with streaming
parse, virtual scrolling, category/level filtering and search. Designed to stay
responsive on multi-GB logs.
How it works
The heavy lifting runs in the extension host (Node.js), not the webview:
- Streaming read —
fs.createReadStream reads the file from disk in 4 MB
buffers. The whole file is never held as a single string, so it sidesteps the
JS engine's max-string-length limit and handles files far larger than RAM
could hold as one string.
- Streaming incremental parser — lines are parsed chunk-by-chunk with
line-boundary buffering and log-category interning. Multi-byte UTF-8
characters that straddle a chunk boundary are decoded correctly.
- Batched delivery — parsed entries are posted to the webview in batches so
the view starts rendering before the file finishes loading.
- Variable-height virtual scrolling — the webview mounts only the rows that
intersect the viewport (prefix-sum offsets + binary search), keeping the live
DOM node count in the dozens regardless of total entry count.
Usage
- Command Palette →
Unreal Log: Analyze Log File... and pick a file, or
- Right-click a
.log / .txt file in the Explorer →
Unreal Log: Analyze Current File, or
- Open a log file in the editor and run
Unreal Log: Analyze Current File.
In the viewer:
- Filter by severity (Display / Warning / Error) via the toggles.
- Filter by category via the
Categories ▾ panel.
- Search with substring or regex (toggle
Regex, Case). Ctrl/Cmd+F
focuses the search box.
- Copy filtered copies the currently visible (filtered) entries.
- Double-click a row to open the raw file at that source line.
Settings
unrealLogAnalyzer.chunkLines (default 50000) — entries shipped to the view
per batch during loading.
Project layout
unreal-log-analyzer-vscode/
├── package.json # extension manifest (commands, menus, activation)
├── extension.js # host: streaming disk read + parse, webview wiring
├── media/
│ ├── viewer.js # webview: virtual scroll + filter + search
│ └── viewer.css # webview styling (uses VSCode theme variables)
├── scripts/
│ └── build-vsix.py # package the extension into a .vsix
├── tests/
│ ├── host-test.js # host streaming-parse integration test
│ └── utf8-test.js # UTF-8 chunk-boundary safety test
└── README.md
Build & install
This is the source of truth for the extension. The installed copy lives in
~/.vscode/extensions/ and is produced from here:
# 1. Package into a .vsix (no node/vsce toolchain needed)
python scripts/build-vsix.py
# 2. Install (or upgrade) into VSCode
code --install-extension unreal-log-analyzer-1.0.0.vsix --force
# 3. Reload VSCode: Command Palette -> "Developer: Reload Window"
Note: a hand-placed folder under ~/.vscode/extensions is not reliably
auto-discovered by recent VSCode versions. Always install via the .vsix
produced above.
Tests
# Host-side streaming parse against a real log file
node tests/host-test.js <path-to-large.log>
# UTF-8 multi-byte chunk-boundary safety (generates its own fixture)
node tests/utf8-test.js
Install (manual fallback)
If you choose to drop this folder directly into ~/.vscode/extensions/, reload
VSCode (Developer: Reload Window). The .vsix route above is preferred.