The Live Log Viewer streams your domain's logs directly into your browser, updating every 2 seconds. You can debug PHP errors, watch traffic in real time, and trace 500 errors back to their cause without ever leaving the panel.
This replaces the old workflow of ssh user@server followed by tail -f /var/log/... for the most common debugging scenarios.
Available Logs
For each domain, you can stream three log files:
| Log type | File | What's in it |
|---|---|---|
| Nginx error.log | /home/{user}/{domain}/logs/error.log |
Web server errors, 5xx responses, upstream failures, syntax errors in vhost configs |
| Nginx access.log | /home/{user}/{domain}/logs/access.log |
Every request to the site (URL, IP, status code, response time, user agent) |
| PHP-FPM error log | /home/{user}/{domain}/logs/php-error.log |
PHP fatal errors, warnings, notices, and stack traces |
How to Use It
- Open Live Logs in the sidebar.
- Pick the domain you want to inspect.
- Pick the log type (error, access, or PHP-FPM error).
- Click Start Stream.
The viewer immediately shows the last ~64 KB of the log file so you have context, then begins streaming new entries every 2 seconds. As lines arrive, they're appended to the bottom of the terminal window.
Click Stop at any time to pause the stream. Click Clear to wipe the display without losing your stream connection.
Display Options
Auto-scroll
When enabled (default), new lines push the view to the bottom automatically — like running tail -f in a terminal. Disable it if you want to scroll back without being yanked to the latest entry.
Wrap lines
Long URLs and stack traces wrap onto multiple lines when this is enabled. Disable it for a more compact view that requires horizontal scrolling but keeps each entry on a single line.
Colour coding
The viewer applies basic syntax colouring automatically:
- Red for lines containing
error,fatal,critical, oremerg - Yellow for lines containing
warnorwarning - Sky blue for lines containing
noticeorinfo
This makes it trivial to scan for problems in busy access logs.
How It Works Under the Hood
The viewer uses HTTP polling, not WebSockets — this is more reliable through reverse proxies and easier to debug. Every 2 seconds, the panel asks the agent: "Give me everything you have in this log file from byte offset N onwards."
The agent:
- Opens the log file (read-only)
- Seeks to the requested byte offset
- Reads up to 64 KB
- Returns the new content + the byte offset to use next time
Log rotation is handled gracefully: if the file shrinks (because logrotate just created a new one), the viewer detects this and resets the offset to the start of the new file. You won't miss any entries.
Limitations
- 64 KB chunks per poll. If your site is being hammered with thousands of requests per second, the viewer may fall behind because each poll only fetches 64 KB. For real-time analysis of high-traffic sites, use SSH and
tail -fdirectly. - In-browser buffer of 256 KB. The viewer caps how much history it keeps in memory to prevent the browser from crashing during long sessions. Older lines scroll off the top.
- No filtering or search yet. You see the raw log stream. To filter (e.g. only show 500 errors), use SSH with
tail -f | grep. - No multi-domain view. You can only stream one log at a time. Open multiple browser tabs if you need to watch several at once.
Common Use Cases
Debugging "the site is broken"
- Open the Nginx error.log.
- Reload the broken page in another tab.
- Watch what appears in the log — most 500/502 errors include the upstream PHP error in the same line.
Watching real-time traffic
- Open the Nginx access.log.
- Leave the stream running.
- Each line is one request:
IP - - [timestamp] "GET /url HTTP/1.1" 200 1234 "referrer" "user agent".
Tracing a PHP fatal error
- Open the PHP-FPM error log.
- Trigger the broken page.
- The fatal error and full stack trace appear in the log within ~2 seconds.
Confirming a deploy worked
- Open the error.log before deploying.
- Deploy your changes.
- Test the site. If anything breaks, you'll see the error in the log immediately.
Troubleshooting
The viewer says "Log file does not exist yet — waiting for first entry…" The log file hasn't been created yet because nothing has hit the domain. Visit the domain in another tab to trigger an entry, or wait until your first real request arrives.
The stream stops after a few seconds with "Network error". Your panel session may have expired. Reload the page and log in again.
Lines are appearing out of order. This shouldn't happen — the viewer always appends in offset order. If you see this, please report it via the support tickets system.
I want WebSocket-based push streaming instead of polling.
The panel intentionally uses polling because it's simpler and more reliable. If you need true push streaming (sub-second latency), use SSH and tail -f directly. WebSocket support may be added in a future release.