Logs
▲ laraport › Production › shop-app-1 › laravel-2026-11-03.log ● ssh shop.example.com | laravel-2026-11-03.log LIVE ↑ more 2.0 MB / 2.0 MB 100% 1 error [2026-11-03 18:13:40] production.INFO: Order SH-50112 paid {"amount":"49.00","gateway":"stripe"} [2026-11-03 18:13:41] production.INFO: Invoice sent {"order":"SH-50112","to":"olena@example.com"} [2026-11-03 18:13:52] production.DEBUG: Cache miss {"key":"catalog:featured"} [2026-11-03 18:13:58] production.INFO: Order SH-50113 paid {"amount":"120.00","gateway":"stripe"} [2026-11-03 18:14:02] production.ERROR: Card declined for order SH-50117 {"exception":"[object] (R [stacktrace] #0 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): App\Jobs\C #1 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Contai #2 {main} "} [2026-11-03 18:14:05] production.WARNING: Slow request {"path":"/api/catalog","ms":1840} [2026-11-03 18:14:11] production.INFO: Order SH-50118 paid {"amount":"18.50","gateway":"paypal"} [2026-11-03 18:14:12] production.INFO: Invoice sent {"order":"SH-50118","to":"mark@example.com"} [2026-11-03 18:14:20] production.INFO: Stock synced {"items":412,"ms":380} [2026-11-03 18:14:31] production.INFO: Order SH-50119 paid {"amount":"64.00","gateway":"stripe"} [2026-11-03 18:14:33] production.NOTICE: Coupon AUTUMN25 used {"order":"SH-50119"} [2026-11-03 18:14:40] production.INFO: Invoice sent {"order":"SH-50119","to":"ivan@example.com"} [2026-11-03 18:14:52] production.INFO: Order SH-50120 paid {"amount":"39.00","gateway":"stripe"} [2026-11-03 18:14:53] production.INFO: Invoice sent {"order":"SH-50120","to":"sara@example.com"} [2026-11-03 18:15:01] production.INFO: Scheduled: catalog:reindex {"took_ms":2140} [2026-11-03 18:15:09] production.INFO: Order SH-50121 paid {"amount":"92.40","gateway":"stripe"} [2026-11-03 18:15:10] production.INFO: Invoice sent {"order":"SH-50121","to":"jonas@example.com"} LARAPORT Production shop-app-1 / search l level filter ]/[ next/prev error ? help
The Logs tab offers three sources, plus a summary of the errors:
- Laravel logs: the log files in
storage/logs; - Errors: the errors summary of the newest Laravel log;
- Docker logs: the container’s stdout and stderr;
- Service logs: nginx, PHP-FPM, supervisor and the other files in
/var/log, plus thecustom_logsof the container.
The pickers list files at once with their size and dates. Line counts fill in afterwards in the background. The Laravel logs picker leaves out dotfiles such as .gitignore and compressed rotations. e on a file there opens its errors summary.
Search and levels
Section titled “Search and levels”| Key | Action |
|---|---|
/ |
Search as you type, case-insensitively. Matches are highlighted and counted (match 3/17) |
enter |
Jump to the newest match |
n / N |
Next / previous match |
l |
Level filter: all, warnings and up, errors only |
] / [ |
Next / previous error |
f or end |
Follow new lines |
f2 |
Wrap long lines |
esc |
Clear the search, then leave |
For Laravel logs the level comes from the entry (production.ERROR:), and stack traces stay with their entry. Other logs are classified by their level words ([error], level=warn, Fatal error).
Errors summary
Section titled “Errors summary”The errors summary answers “what is failing, and how often?” without scrolling through the log. It lists every kind of error and warning once.
▲ laraport › Production › shop-app-1 › Errors · laravel-2026-11-03.log ● ssh shop.example.com Errors · 5 kinds · 214 entries · whole file, 38M count level exception message where 87 ERROR RuntimeException Card declined for order SH-50117 app/Jobs/Char… 12 ERROR QueryException SQLSTATE[23505]: Unique violation: dupl… vendor/larave… 9 ERROR NotFoundHttpException The route api/v1/cart could not be foun… vendor/larave… 2 CRITICAL ConnectionException Connection refused [tcp://redis:6379] vendor/predis… 104 WARNING Slow request 5 rows · row 1 · col 1/7 count LARAPORT Production shop-app-1 ↑↓ move enter latest entry o order: count / latest ? help
Open it with Errors on the Logs tab, for the newest log, or with e on a file in Laravel logs.
Each row shows the count, the level, the exception class, the message, where it was thrown, and the first and last time it happened. Errors come before warnings.
| Key | Action |
|---|---|
enter |
The latest occurrence, with its stack trace |
o |
Order by count, or by the latest occurrence |
a |
Read the whole file (shown when the log is over 64 MB) |
l |
Open the log itself |
r |
Read again |
Entries are the same kind when they have the same level, exception class, file and line, and the same message once numbers, IDs and quoted values are blanked out. So “Card declined for order SH-49231” and “Card declined for order SH-50117” count as one kind.
Entries whose message spans several lines, such as a QueryException with its SQL error, are read whole: their exception and location are found further down.
The grouping runs inside the container with awk, over the last 64 MB of the file unless you press a. Only the summary travels to your computer, even from a log of several gigabytes.
Group logs
Section titled “Group logs”l on a group header in the container list follows all running containers of that project in one stream, up to 16. Each line starts with a coloured label: the service, or its display name. The recent lines of each are merged in time order, then new lines follow as they come. Search, levels and error jumps work as for one container.
Large files
Section titled “Large files”Log files are read by byte offset, never line by line, so opening a 1 GB log takes as long as a 1 MB one.
- Opening reads the last 256 KB, then follows new lines from exactly where that chunk ended. Nothing is lost or repeated.
- Scrolling up loads the 256 KB before the earliest loaded line.
- The status bar shows the position in bytes and percent. Docker logs have no file, so they show the line count instead.