Mejora la Gestión de Errores en Laravel con Sentry: Agregando Contexto Personalizado

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.

Agregar Contexto Personalizado

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'),
    ]);
});

Conclusión

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.

Como se ve el issue en Sentry con la nuevas secciones de contexto
sentry-context.png 57.6 KB

El archivo Handler.php completo

<?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);
        });
    }
}

Mejora la Gestión de Errores en Laravel con Sentry: Agregando Contexto Personalizado
02 June 2024

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer