Quanti, di voi, hanno speso qualche minuto per integrare Laravel con Sentry, per avere sempre una visuale “dall’alto” dei propri progetti? Vedo poche mani alzate, eh!
Sentry è un software as a service (Saas) dedicato all’error tracking e al performance monitoring. Insomma, ci permette di tracciare gli errori (e non solo) che escono fuori in un nostro progetto. Supporta una quantità immane di linguaggi e framework… e ovviamente Laravel è uno tra questi!
Sono sempre stato affascinato dalle soluzioni tecniche il cui tempo di adozione è inversamente proporzionale alla quantità di potenziali problemi che possono risolverti. Scrivo questo articolo perché, ultimamente, parlando con molti sviluppatori ho scoperto che tanti non ne fanno uso, mentre alcuni nemmeno lo conoscono.
La cosa mi ha sorpreso molto: uno dei mantra nei miei progetti è “non puoi migliorare quello che non puoi misurare”. Spesso non ci rendiamo conto quanto sia vero.
Il funzionamento di Sentry è semplice: dopo una fase di configurazione che dura, letteralmente, pochi minuti, tutte le eccezioni lanciate dalla propria applicazione vengono mandate a Sentry, che le mostra in modo molto, molto più leggibile di quello che possiamo leggere nei log:
Insomma, messa così è molto più semplice da leggere, no? Chiaramente, non è solo questione di estetica.
Innanzitutto, le eccezioni vengono raggruppate per tipo/classe. Questo significa che se usiamo eccezioni diverse per problemi diversi, sarà più semplice capire cosa funziona di più e cosa funziona di meno, nell’economia generale della nostra applicazione. Ricordate? Misurare, misurare sempre.
Si può decidere di definire delle release (una sorta di “versione” dell’applicazione) al momento del deploy di in produzione. In questo modo, Sentry cercherà di capire quando effettivamente un nuovo bug è stato introdotto.
Infine, si può iniziare con un free plan “Developer” che supporta la bellezza di 5000 errori mensili. Per farsi le ossa e capire se può fare al caso nostro è un ottimo budget.
Installare e configurare l’integrazione
Una volta creato un account su Sentry (ci si può iscrivere da https://sentry.io/signup/) verrà chiesto di creare un nuovo progetto. In fase di creazione di un progetto, verrà chiesto di che tecnologia si parla. In questo caso, potremo scegliere Laravel.
Il resto è davvero molto semplice. La prima cosa da fare è installare l’integrazione tramite composer, usando il comando
composer require sentry/sentry-laravel
Una volta installato, dobbiamo modificare, come segue, il metodo register della classe App\Exceptions\Handler per inviare a Sentry le eccezioni intercettate:
public function register() { $this->reportable(function (Throwable $e) { if ($this->shouldReport($e) && app()->bound('sentry')) { app('sentry')->captureException($e); } }); }
Importante: una volta terminata la configurazione, questo codice manderà a Sentry le varie eccezioni che usciranno fuori di volta in volta. Per i miei progetti, preferisco aggiungere un’ulteriore condizione a quell’if, che si occupa di verificare che l’ambiente corrente non sia quello in locale.
Manca solo un’ultima cosa: l’esecuzione del comando
php artisan sentry:publish --dsn=https://CODICE.ingest.sentry.io/ID_PROGETTO
che si occuperà di finire di configurare tutto il necessario. Il comando con i valori “giusti” verrà suggerito dallo stesso Sentry, direttamente.
Chicchetta: se si apre la pagina della documentazione dedicata (e avete già fatto il login) è possibile generare automaticamente il comando scegliendo il progetto da una dropdown. Questa sì che è developer experience, gente.
Non rimane che l’ultima cosa: verificare che tutto funzioni. Anche qui Sentry ci viene incontro: il package ha un comando Artisan pronto da usare, ovvero
php artisan sentry:test --transaction
che si occupa di lanciare un’eccezione di prova da inviare a Sentry. Nel giro di pochi secondi (al massimo qualche minuto) sarà possibile vederla nella dashboard del progetto su Sentry. Niente male, vero? Addio log scomodi e monocromatici, è stato bello!
Concludendo…
Conoscevate già Sentry? Spero che questa brevissima introduzione vi sia stata utile. Per me, è stata un’autentica rivelazione e ha velocizzato e migliorato di molto il mio processo di sviluppo.
Usate qualche tool simile? Fatemelo sapere nei commenti, sono curioso!