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);
});
}
}
Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.