Publicidad

Ver las consultas sql que se ejecutan en Laravel


Por Alex el 28/06/2024, Comentar el artículo

Comparte este artículo:      




A veces cuando trabajas en PHP es conveniente ver que información que consultas sql se envían a la base de datos, en Laravel es muy sencillo activar este log que al ser poco invasivo si hay problemas, y es necesario, podríamos hasta activarlo en producción hasta solucionar el problema ...


Sumario



Activar registro de logs para las consultas

Para activar el registro de consultas que se envían a la base de datos hay que poner el siguiente código en nuestro proyecto de Laravel.

En el fichero de configuración .env

APP_DEBUG=true

Porque aunque he dicho "si es necesario" .. normalmente esto lo utilizaremos en desarrollo, por eso, en el fichero .env nos aseguramos que estamos en desarrollo y activado el debug.

Ahora en el fichero app/Providers/AppServiceProvider.php en el método boot ponemos el siguiente código:

...
use Illuminate\Support\Facades\Log;
...
public function boot()
    {
        if (env('APP_DEBUG')) {
            DB::listen(function ($query) {
                \Log::info("Query Time:{$query->time}ms] $query->sql", $query->bindings);
                // Para mostrar las consultas en la consola
                // echo "Query Time:{$query->time}ms] $query->sql";
            });
        }
    }


Comentado dejo el código si se quiere mostrar la consulta por pantalla.

$query->bindings indica, guarda, los parámetros que se le pasa a la consulta.

use Illuminate\Support\Facades\Log; lo pondremos arriba de todo de la clase donde están el resto de use

Esto nos creará una entrada en el log storage/logs/laravel.log por cada consulta que se envíe a la base de datos, y se verá de la siguiente forma:

Como se ve el log de sql en laravel.log

Y ya estaría, cada query se guarda en el log ... Pero no esta, porque meterlo todo en el mismo log, por lo menos a mi, me lía, así que vamos a crear un log solo para las consultas sql.


Activar fichero de log personalizado para las consultas sql

Para crear un log personalizado vamos al fichero config/logging.php y añadimos el siguiente código en el array channels:

'sql' => [
        'driver' => 'daily',
        'path' => storage_path('logs/sql.log'),
        'level' => 'debug',
    ],


Con esto le decimos a Laravel que nos cree un log diario en la ruta storage/logs/ y se llamará sql.log

Ahora tenemos que modificar el código anterior del app/Providers/AppServiceProvider.php para decirle en que log queremos guardar los registros de las consultas sql.

public function boot()
    {
        if (env('APP_DEBUG')) {
            DB::listen(function ($query) {
                Log::channel('sql')->info("Query Time:{$query->time}s] $query->sql", $query->bindings);
                // Para mostrar las consultas en la consola
                // echo "Query Time:{$query->time}s] $query->sql";
            });
        }
    }


Con Log::channel('sql') le decimos en que log, configurado en el fichero de configuración config/logging.php, queremos utilizar.

Y esto es todo, feliz programming
Saludos
Alex
/ :-)


Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.