Laravel Telescope es un paquete que nos ayuda a debugar nuestra aplicación de manera sencilla. Con Laravel Telescope podremos ver todas las requests que se han hecho, consultas a la base de datos, comandos ejecutados, excepciones que se lancen, ver los emails enviados, etc, etc. En esta entrada, vamos a ver cómo instalarlo y veremos qué hace cada sección.
Instalación
Para instalarlo, como siempre, tenemos que ejecutar un comando de Composer:
1 |
composer require laravel/telescope |
Nota: ten en cuenta que deberás tener instalada la extensión ext-bcmath de PHP. A mí me daba error.
Una vez finalice, ejecutamos el siguiente comando para que se publiquen los ficheros del paquete (service provider, assets y archivos de configuración):
1 |
php artisan telescope:install |
Y, ahora, ejecutamos las migraciones:
1 |
php artisan migrate |
Con todo esto, ya tendremos Laravel Telescope instalado en nuestro proyecto. Para acceder a él vamos a http://localhost:8000/telescope.
Gracias a que Telescope es configurable, podemos cambiar la ruta de acceso y poner lo que queramos. Para ello, vamos al archivo de configuración de Telescope en config/telescope.php y en la variable 'path' ponemos la ruta que queramos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php use Laravel\Telescope\Watchers; use Laravel\Telescope\Http\Middleware\Authorize; return [ ... /* |-------------------------------------------------------------------------- | Telescope Path |-------------------------------------------------------------------------- | | This is the URI path where Telescope will be accessible from. Feel free | to change this path to anything you like. Note that the URI will not | affect the paths of its internal API that aren't exposed to users. | */ 'path' => 'telescope', ... |
En este archivo, también podemos configurar los middlewares de acceso para la ruta de Telescope, las rutas y comandos que queremos que no analice, entre otras configuraciones. Aunque la configuración más importante que tiene este archivo es la de los 'watchers' que es un array con los observadores que nos analizarán la aplicación para recopilar los datos y después mostrarlos. Este array es personalizable, es decir, podemos activar o desactivar los watchers que queramos o configurar ciertas opciones.
Cambiar colores del tema
También, podemos cambiarle el tema a Telescope y ponerle un tema oscuro. Podemos elegir entre un tema con colores claros (que es el que viene por defecto) o un tema con colores oscuros.
Para poner el tema oscuro, simplemente, vamos al Service Provider de Telescope en app/Providers/TelescopeServiceProvider.php y descomentamos la siguiente línea:
1 |
Telescope::night(); |
Si vamos al navegador y refrescamos, lo veremos así:
Para volver al tema anterior con los colores claros, comentamos otra vez la línea y se volverá a ver como antes.
Observadores (watchers)
Los observadores son los encargados de recopilar la información de nuestra aplicación para después mostrarla en el dashboard de Telescope. Telescope viene con muchos observadores, los cuales nos facilitan la tarea de debugar nuestra aplicación. Vamos a ir viendo todos los watchers disponibles con ejemplos, para ver cómo funcionan.
Antes de nada, si activamos este icono se nos cargarán automáticamente los nuevos registros que vayan guardando. Si no esta activado, nos saldrá un botón avisándonos de que hay nuevos registros («Load New Entries») y si le damos, aparecerán.
Requests
El observador de request registra la request, headers, sesiones y respuestas de cualquier petición HTTP. Podemos ver el estado devuelto, el tipo de request (POST, GET…) y cuánto ha tardado en ejecutarse:
Si entramos al detalle de cualquier request de la lista dándole al icono del ojo, podremos ver el método del controlador ejecutado, los middlewares ejecutados, la ruta, la respuesta, entre otras cosas muy útiles sobre la request. Aunque también, nos muestra otros registros relacionados con esta request. Por ejemplo, en este caso, como se han hecho unas consultas a la base de datos y se ha enviado un email, nos lo muestra abajo separado por tabs. Si fuese cualquier otro tipo de watcher (log, notificación, etc), también nos lo mostraría en otro tab.
Commands
El observador de comandos registra la información de los comandos ejecutados en nuestra aplicación.
Si entramos en el detalle, podremos ver los argumentos pasados y las diferentes opciones. Así como en el caso anterior, también, podremos ver los registros relacionados con este.
Schedule
El observador de schedule registra el comando y el output de cualquier tarea programada por nuestra aplicación. En el listado, podemos el comando ejecutado y cada cuánto se va a ejecutar (expression). Si entramos al detalle, veremos lo mismo y alguna información más sobre el comando.
Jobs
El observador de jobs lo que hace es registrar la información y el estado de cualquier job lanzado por la apliación. Podremos ver en tiempo real cuando pasa de estar pendiente a estar procesado.
Si entramos en el detalle, podemos ver toda la información usuario que lo ha lanzado, la cola en la que está añadido, las veces que se intenta, entre otras cosas.
Exceptions
El observador de excepciones registra toda la información de cualquier excepción lanzada en nuestra aplicación. En el listado podemos ver la excepción lanzada con su mensaje y el número de veces que se ha lanzado.
Si vamos al detalle, podemos ver el archivo y línea dónde se ha lanzado, el tipo, las veces que se ha lanzado y cuando, la request en que se ha lanzado e ir directamente a ella, el usuario logueado, el mensaje, entre otras cosas.
Logs
El observador de logs registra la información de cualquier log que se lance en nuestra aplicación. En el listado podemos ver el mensaje del log y el tipo.
Si entramos al detalle, vemos el tipo, el mensaje y la request en la que se ha lanzado con un link para ir directamente a ella.
Dumps
Este es un observador muy interesante a la vez que útil. Laravel tiene un helper llamado dump($var) para poder ver de manera «bonita» el valor de arrays, objetos o cualquier tipo de variable. Es un helper muy útil para debugar, lo que pasa es que si lo ponemos en medio de la ejecución de cualquier proceso, puede que no se muestre porque el proceso no se detiene. Para que se detenga el proceso, tenemos el helper dd($var) pero hay veces que no queremos que se detenga por completo. Para poder ver el los dumps sin que se detenga la ejecución, Laravel introdujo en la versión 5.7 el comando php artisan dump-server , con este comando los dumps del código se nos mostrarán por la consola. Pero con Telescope, no hace falta ejecutar este comando, ya que cuando estás en esta sección, directamente nos los captura y nos los muestra en Telescope. Pero, si cambiamos de sección ya no nos los capturará y no aparecerá en Telescope y, por tanto, el código seguirá el flujo normal.
Vamos a ver un ejemplo para verlo más claro:
Queries
El observador de queries registra toda la información de todas las consultas que se hacen en nuestra aplicación. Podemos ver el tiempo de ejecución, el fichero dónde se ha ejecutado, la request en la que se ha ejecutado con un link para ir a ella y la consulta ejecutada.
Models
El observador de modelos registra cualquier cambio producido a un modelo. Se registra cuando se lanza algún evento de Eloquent (created, updated, restored o deleted).
Si entramos al detalle, podremos ver la request donde se ha lanzado con un link hacia ella, el modelo afectado y la acción (created, updated, restored o deleted).
Events
El observador de eventos registra información sobre cualquier evento lanzado en nuestra aplicación. Podemos ver los listeners y la información del mismo, si entramos al detalle.
El observador de mails registra información sobre cualquier correo saliente de nuestra aplicación. En el listado, podemos la clase del mail enviado, el asunto de éste y el número de personas que lo reciben.
En el detalle, lo más interesante, es que podemos ver una previsualización del mail enviado con todos lo datos el receptor, del emisor, entre otras cosas.
Notifications
El observador de notificaciones registra información sobre todas las notificaciones enviadas por nuestra aplicación. En el listado, podemos ver el nombre de la notificación, el receptor y el tipo de canal.
En el detalle, podemos ver lo mismo que en el listado, más la request dónde se ha lanzado con un enlace a ella.
Gates
El observador de gates registra la información sobre las policies y gates ejecutadas en nuestra aplicación. Si la policy se ejecuta con éxito, veremos en result un label verde diciendo «allowed», de lo contrario pondrá «denied» y en rojo.
En el detalle, podremos ver lo mismo pero más desarrollado. Con la request en la que se ha ejecutado, el usuario logueado y los argumentos pasados a la policy.
Cache
El observador de cache registra cuando una clave de cache se ha obtenido, caducado, actualizado o eliminado.
Si entramos en el detalle, dependiendo de la acción, podremos ver unas informaciones u otras. Por ejemplo, podemos ver el valor guardado o obtenido y en que request se ha hecho.
Redis
El observador de Redis registra cualquier comando de Redis ejecutado por nuestra aplicación. En el listado, podemos ver los comandos ejecutados y si entramos en el detalle, además, podemos la request dónde se ha ejecutado.
Laravel Telescope en entornos de producción
Laravel Telescope también podemos utilizarlo en entornos de producción, no solamente en local. Pero debemos tomar las medidas de seguridad pertinentes, es decir, no dejar entrar a usuarios que no deberían. Para ello, disponemos de los middlewares, de cambiar el path a un path más complejo y, además, Telescope integra un permiso con el que podremos definir qué usuarios podrán entrar.
Para definir este permiso, vamos al Service Provider de Telescope y vamos al método gate:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
... /** * Register the Telescope gate. * * This gate determines who can access Telescope in non-local environments. * * @return void */ protected function gate() { Gate::define('viewTelescope', function ($user) { ... }); } ... |
En este método, podríamos definir el permiso para que un usuario pueda acceder. Podríamos decir si tiene el id 1, si es admin, si tiene X email, etc. Podemos poner lo que queramos, con tal de limitar el acceso a esos usuarios que queremos.
Tenía ya ganas de probar Laravel Telescope y me ha parecido impresionante. Un gran paquete para tener en cuenta a la hora de desarrollar nuestras aplicaciones en Laravel.
-