Telegram Group & Telegram Channel
.🛠 Как логировать 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



tg-me.com/php_lib/731
Create:
Last Update:

.🛠 Как логировать 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

BY Библиотека PHP программиста 👨🏼‍💻👩‍💻


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/php_lib/731

View MORE
Open in Telegram


Библиотека PHP программиста ‍‍ Telegram | DID YOU KNOW?

Date: |

Mr. Durov launched Telegram in late 2013 with his brother, Nikolai, just months before he was pushed out of VK, the Russian social-media platform he founded. Mr. Durov pitched his new app—funded with the proceeds from the VK sale—less as a business than as a way for people to send messages while avoiding government surveillance and censorship.

Библиотека PHP программиста ‍‍ from us


Telegram Библиотека PHP программиста 👨🏼‍💻👩‍💻
FROM USA