Descubre cómo mejorar la visibilidad y resolución de errores en tus aplicaciones Laravel utilizando Sentry. Aprende a agregar contexto personalizado para capturar información clave y acelerar el proceso de depuración.
Una vez que Sentry está configurado, podemos agregar contexto personalizado a los errores. Aquí hay algunas formas de hacerlo:
Información del Usuario
Aggegar información sobre el usuario que experimentó el error puede ser crucial para entender el contexto del problema.
use Sentry\State\Scope; // Dentro de tu controlador o middleware Sentry\configureScope(function (Scope $scope): void { $user = auth()->user(); if ($user) { $scope->setUser([ 'id' => $user->id, 'email' => $user->email, 'username' => $user->username, ]); } });
Información Personalizada
Puedes agregar cualquier otro dato que consideres relevante. Por ejemplo, el estado de ciertos servicios o variables internas.
Sentry\configureScope(function (Scope $scope): void { $scope->setContext('custom_data', [ 'service_status' => 'active', 'feature_flag' => config('features.new_feature'), ]); });
Agregar contexto personalizado a los errores reportados en Sentry no solo mejora la visibilidad y comprensión de los problemas, sino que también acelera significativamente el proceso de resolución. Al aprovechar estas técnicas, podemos crear aplicaciones más robustas y ofrecer una mejor experiencia a nuestros usuarios.
Espero que encuentren útiles estos consejos. Si tienen alguna pregunta o sugerencia, ¡no duden en dejar sus comentarios!
¡Feliz codificación!
¡Gracias por leer! Si te gustó este post, no olvides compartirlo con otros desarrolladores que puedan beneficiarse de estos consejos.
<?php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Sentry\Laravel\Integration; use Sentry\State\Scope; use Throwable; use function Sentry\configureScope; class Handler extends ExceptionHandler { /** * The list of the inputs that are never flashed to the session on validation exceptions. * * @var array<int, string> */ protected $dontFlash = [ 'current_password', 'password', 'password_confirmation', ]; /** * Register the exception handling callbacks for the application. */ public function register(): void { configureScope(function (Scope $scope): void { if (auth()->check()) { $scope->setUser([ 'email' => auth()->user()->email, 'id' => auth()->id(), 'roles' => auth()->user()->roles->pluck('name')->toArray(), ]); } $scope->setContext('character', [ 'name' => 'Mighty Fighter', 'age' => 19, 'attack_type' => 'melee' ]); }); $this->reportable(function (Throwable $e) { Integration::captureUnhandledException($e); }); } }