.🛠 Как логировать SQL-запросы только при ошибках — 4 мая 2026 г. в 04:56:07.106
.🛠 Как логировать SQL-запросы только при ошибках Часто сталкиваюсь с ситуацией: ошибка 500 в проде, а что именно пошло не так — неясно. Особенно если это была ошибка в SQL-запросе. Логировать все SQL-запросы — слишком жирно и шумно. Но логировать только при исключениях — вот это огонь! 🔍 Решение Добавьте следующий сниппет в AppServiceProvider: use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; public function boot() { DB::listen(function ($query) { if (app()->bound('exception.logged')) { Log::channel('sql')->debug($query->sql, $query->bindings); } }); app()->singleton('exception.logged', function () { return true; }); app()->error(function (\Throwable $e) { app()->instance('exception.logged', true); }); } 🔐 Пояснение - При каждом SQL-запросе мы проверяем, был ли в этом запросе выброшен exception. - Если да — логируем SQL. - Используем отдельный лог-канал sql, чтобы не засорять основной laravel.log. 👉 Создайте в config/logging.php канал sql, направьте его в отдельный файл, например storage/logs/sql.log. Теперь, если в продакшене будет падение — вы увидите какой SQL-запрос был выполнен перед ошибкой. Это невероятно ускоряет диагностику багов. 👉 @php_lib

