Also in 繁體中文(台灣).
A desktop app for reading Unity Player.log files. Parses the raw log into structured, searchable entries, so large logs that stall a text editor open quickly and stay responsive.
Player.log itself carries no timestamps and no severity prefixes; opened in a text editor it is a flat wall of lines, with stack traces broken across several rows. This tool rebuilds each entry together with its stack trace, infers the severity, and groups repeated messages; clicking a stack frame opens that file and line in an IDE.
Shipped-game logs run to hundreds of megabytes and hundreds of thousands of lines. A general text editor turns sluggish at that size, and shows none of the structure the log carries: call-site frames, exception blocks, the startup banner.
Most existing Unity log tools sit in a different niche:
- In-game debug consoles show logs live inside a running build, rather than the log file a tester sends back afterwards.
- Older editor-window viewers load the file but are built on Unity immediate-mode GUI, so they bog down or crash on large logs.
- SaaS crash collectors work well but upload the logs to a third party and bill by volume.
- The polished web viewers are front-ends for paid, closed-source products.
This is the offline, local, open-source option: a fast native reader for a log file already on the machine, with nothing uploaded and no paywall.
Longer write-up: [Tools] Unity Log Viewer: No More Reading Player.log in a Text Editor (English and 繁體中文).
Opening a log — several ways in:
- Associate the
.logextension, then open a file by double-clicking it in Explorer. - Drag a file onto the window.
- Pick from recent files, from Player.log files under LocalLow, or from watch folders added by hand.
- Open from the command line (
UnityLogViewer <path>); a second launch reuses the running window.
Reading
- Parses Player.log despite its missing timestamps and level prefixes, keeping multi-line stack traces attached to their entry.
- Infers the level (Log, Warning, Error, Assert, Exception).
- Collapses duplicate messages with an ×N count. Numbers in a message are masked, so spam that differs only in its numbers still folds into one group.
- Detail panel with the full message, a formatted stack trace, and a copy button for the raw entry.
- Live tail: toggle ⏵Live to follow a file the game is still writing. New entries parse incrementally, the list stays pinned to the bottom until scrolled up, and a rewritten log (game restart) reloads automatically.
Finding
- Search the message and stack frames together: space-separated terms are AND-matched,
-termexcludes, with case and regex toggles. Matches are highlighted, and the▽toggle turns filtering off so the query only highlights. - Jump between errors (F8 / Shift+F8) and filter by level (1 / 2 / 3); the selected entry stays put when filters change.
- Bookmark entries (B or the ★ button) and jump back from the sidebar list; "Copy ref" copies a
file #entrytext reference for sharing. - The scrollbar doubles as a map of the whole file: warning density, errors and bookmarks are marked along the track, and clicking a marker jumps straight there. Its right-click menu chooses which kinds are shown.
- Flags native crash dumps (an
OUTPUTTING STACK TRACEsection) with a link to jump to it.
IDE deep-linking
- Click a
file:linestack frame to open it in an IDE at that line, with no setup. This tool reads the external script editor configured in Unity, then falls back through Visual Studio, Rider, and VS Code. A custom command template is available as an override.
Triage
- A system-info card from the log banner (Unity version, graphics API, GPU, VRAM, driver), with a copy-summary button for pasting into bug reports.
- Whole-file level counts and a Top 10 of repeated errors, each clickable to jump to the entry.
Comfort
- Tabs, light/gray/dark themes, adjustable font size (Ctrl+scroll), and row tinting. Preferences are stored locally.
- The UI is localized, following the system language by default. Adding a locale is a single-file PR — see
src/locales/en.ts.
Parsing runs through a native Rust core on a background thread, so the window stays responsive while a file loads. The list is virtualized and pages load on demand, so the frontend never holds the whole log in memory. Scrolling and filtering stay smooth even on multi-gigabyte logs.
Fully offline by default. Reads local files only and makes no network requests: no telemetry, nothing leaves the machine. The one exception is opt-in: a "check for updates" setting (off by default) that contacts GitHub at startup to check for a newer release — either notifying with a download link, or, on installed builds, downloading and installing it.
Download an installer or the portable exe from the Releases page, or build from source.
Building from source needs Rust (stable, MSVC toolchain on Windows), Node.js 20+, and the Tauri prerequisites. WebView2 ships with Windows 10/11. npm run tauri build signs its auto-updater artifacts, so it needs an updater signing key: generate one once (press Enter at password prompts to leave it empty) and point TAURI_SIGNING_PRIVATE_KEY at it before building.
npm install
npm run tauri dev # run in development (no key needed)
npm run tauri signer generate -- -w path\to\updater.key # one-time; keep the key outside the repo
set TAURI_SIGNING_PRIVATE_KEY=path\to\updater.key
npm run tauri build # build UnityLogViewer.exe and installersThe executable lands in src-tauri/target/release/ and the MSI/NSIS installers in src-tauri/target/release/bundle/. The executable is self-contained and runs from anywhere.
| Key | Action |
|---|---|
F8 / Shift+F8 |
Next / previous error |
1 / 2 / 3 |
Toggle Log / Warning / Error filters |
Ctrl+F |
Focus search |
B |
Toggle bookmark on the selected entry |
Esc |
Clear search |
↑ / ↓ |
Move selection |
Home / End |
Jump to top / bottom |
Ctrl+scroll, Ctrl+= / Ctrl+- / Ctrl+0 |
Zoom text |
Ctrl+W / Ctrl+Tab |
Close / cycle tabs |
Windows 10/11 is the supported and tested platform. The parsing core is cross-platform, but the local-log scan, IDE integration, and file association are Windows-only for now. There are no macOS or Linux builds yet.
Tauri 2, React and TypeScript (Vite), and a dependency-free Rust parsing core (ulv-core). The parsing logic is kept separate from Tauri and covered by unit tests (cargo test, npm test).
Built with help from Claude; the author reviewed the design decisions and the changes.
Copyright © 2026 bwaynesu. Licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).
The software may be used, modified, and distributed, but any distributed or network-served derivative must be released under the AGPL with its complete source code. A closed-source fork or product is not permitted.
