Класичний спосіб - tail -f storage/logs/laravel.log. Він працює лише з файловим каналом, показує сирий текст разом з багаторядковими стеками, і його незручно фільтрувати.
Laravel Pail - Artisan-команда, яка показує записи логів у реальному часі в зручному вигляді:
composer require --dev laravel/pail
php artisan pail
Головна перевага: Pail отримує записи напряму від застосунку, тому працює з будь-яким драйвером логів - навіть якщо записи йдуть у Sentry, Papertrail чи stderr і локального файлу немає.
Фільтри:
php artisan pail --filter="QueryException" # тип винятку, файл, текст
php artisan pail --message="Payment" # лише за текстом повідомлення
php artisan pail --level=error # рівень
php artisan pail --user=42 # записи, зроблені в запитах користувача 42
php artisan pail -v # без скорочень
php artisan pail -vv # зі стеком викликів
Фільтр за користувачем особливо корисний: можна відтворити проблему під потрібним обліковим записом і бачити лише свої записи серед загального потоку.
Типові сценарії:
- налагодження черги чи планувальника, де немає сторінки помилки: запустити
pailпоруч з воркером; - розробка інтеграції з вебхуками - бачити, що прийшло й що записано, одразу;
composer run devу новому Laravel-проєкті запускає Pail разом із сервером, чергою й Vite.
Обмеження:
- потрібне розширення PCNTL - на Windows лише через WSL;
- Pail показує записи, що з'являються після запуску, - історію дивляться в логах;
- це інструмент розробника: на продакшені для пошуку причин збоїв потрібне централізоване сховище логів з пошуком і зберіганням, а не перегляд у терміналі.
Щоб логи були корисними в Pail: структурований контекст замість склеювання рядків - Log::info('Order paid', ['order_id' => $order->id]).