Cattura tutti gli errori JavaScript e inviali al server


232

Mi chiedevo se qualcuno avesse esperienza nella gestione degli errori JavaScript a livello globale e li avesse inviati dal browser client a un server.

Penso che il mio punto sia abbastanza chiaro, voglio conoscere ogni eccezione, errore, errore di compilazione, ecc. Che si verifica sul lato client e inviarli al server per segnalarli.

Uso principalmente MooTools e head.js(per il lato JS) e Django per il lato server.


20
Non vedo perché questa domanda non sia chiara.
— Michael Hilus,

3
Votato due volte per riaprire la domanda, ma senza fortuna. Non è del tutto chiaro perché questa domanda sia chiusa come poco chiara.
— Muhammad Usman,

7
@ andrew-barber - se così tanti utenti trovano questa domanda abbastanza rilevante per votarla, forse se non ti è chiaro il problema è con te ??
— Isapir,

5
Questa domanda non è solo chiara, ma è anche sottovalutata :)
— Teoman shipahi

Risposte:


16

Di recente ho provato Sentry in produzione e funziona benissimo (JS e altre lingue come PHP)

1- È open source (puoi installarlo sul tuo server) 2- Puoi usare il piano gratuito (100 report / giorno)

O installalo sul tuo server: github.com/getsentry


Si noti che hanno un piano gratuito illimitato per le istituzioni educative
— christianvuerings

8
Non sembra più essere open source, tutte le opzioni sono a pagamento?
— David Cumps,

4
@DavidCumps Offrono ancora il servizio gratuito (versione di prova), ma hai solo 7 giorni di cronologia dei bug o puoi installarlo sul tuo server sin dal suo open source ( github.com/getsentry )
— Tarek,

1
Google Tag Manager ha un listener di errori Javascript, forse vale la pena dare un'occhiata, soprattutto se stai già utilizzando GA
— Adrian Gunawan

Dovresti anche controllare TrackJS per questo. È un servizio a pagamento, ma fornisce un sacco di contesto su come l'utente è entrato nella situazione di errore per il debug. Sono uno degli sviluppatori e ho risolto un sacco di bug :)
— Todd Gardner,

318

Darei un'occhiata a window.onerror

Esempio:

window.onerror = function(message, url, lineNumber) {  
  //save error and send to server for example.
  return true;
};  

Tieni presente che la restituzione di true impedirà l'attivazione del gestore predefinito e la restituzione di false consentirà l'esecuzione del gestore predefinito.


9
È preferibile assegnare window.onerror preferibilmente prima che venga eseguito qualcos'altro. Quindi, ovunque tu voglia metterlo, assicurati solo che venga eseguito prima di qualsiasi altro codice / file js.
— Mike Lewis,

17
Nota, Mozilla consiglia: "Nota che alcuni / molti eventi di errore non attivano window.onerror, devi ascoltarli in modo specifico".
— Adam Naylor,

88
Sì, adoro il modo in cui dice alcuni / molti , molto descrittivo - grazie Mozilla.
— Daniel Mendel,

5
Mozilla espone GlobalEventHandlers.onerror: developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…
— roland

1
Cosa succede se il codice che gestisce window.onerror stesso genera un errore. Esiste la possibilità di un ciclo infinito?
— Martin Brown,

15

Se il tuo sito Web utilizza Google Analytics, puoi fare quello che faccio:

window.onerror = function(message, source, lineno, colno, error) {
  if (error) message = error.stack;
  ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}

Alcuni commenti sul codice sopra:

  • Per i browser moderni, viene registrata la traccia dello stack completo.
  • Per i browser meno recenti che non acquisiscono la traccia dello stack, viene invece registrato il messaggio di errore. (Principalmente versione iOS precedente nella mia esperienza).
  • Viene inoltre registrata la versione del browser dell'utente, in modo da poter vedere quali versioni del sistema operativo / browser generano quali errori. Ciò semplifica le priorità e i test dei bug.
  • Questo codice funziona se si utilizza Google Analytics con "analytics.js", in questo modo . Se invece si utilizza "gtag.js", in questo modo , è necessario modificare l'ultima riga della funzione. Vedi qui per i dettagli .

Una volta che il codice è attivo, ecco come visualizzi gli errori Javascript dei tuoi utenti:

  1. In Google Analytics, fai clic sulla Behaviorsezione e quindi sul Top Eventsrapporto.
  2. Otterrai un elenco di categorie di eventi. Fai clic window.onerrorsull'elenco.
  3. Vedrai un elenco di tracce dello stack Javascript e messaggi di errore. Aggiungi una colonna al rapporto per le versioni OS / browser dei tuoi utenti facendo clic sul Secondary dimensionpulsante e inserendo Event Labella casella di testo visualizzata.
  4. Il rapporto sarà simile allo screenshot qui sotto.
  5. Per tradurre le stringhe del sistema operativo / browser in descrizioni più leggibili dall'uomo, le copia e incollo in https://developers.whatismybrowser.com/useragents/parse/

inserisci qui la descrizione dell'immagine


3
Questo non intrappola tutti gli errori, basta provare a catturare i blocchi, anche se è una cosa interessante da spiegare e non penso che tu meriti i voti negativi.
— Nick Steele,

Grazie, Nick! Ho aggiornato la mia risposta con un codice testato in battaglia che funziona bene sul mio sito Web e che cattura tutti gli errori, non solo quelli che intrappoli con try ... catch.
— Martin Omander,

2

Non provare a utilizzare i servizi di terze parti, invece prova per il tuo.

I gestori degli errori possono individuare gli scenari seguenti,

  1. Tipo non catturato L'errore non può essere acquisito
  2. L'errore di riferimento non rilevato non può essere acquisito, ad esempio: var.click ()
  3. TypeError può essere acquisito
  4. L'errore di sintassi può essere acquisito
  5. L'errore di riferimento può essere acquisito

Per catturare errori Javascript:

window.addEventListener('error', function (e) {
  //It Will handle JS errors 
})

Per acquisire errori AngularJS:

app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
   return function (exception, cause) {
       //It will handle AngualarJS errors
      }
   })
})

0

Inoltre, il servizio http://jslogger.com può aiutarti in questo:

Registra errori ed eventi Javascript nel cloud

da http://jslogger.com/features :

Da ora in poi puoi spiare tutti gli errori che interrompono l'esperienza utente del tuo sito. Ogni errore Javascript verrà rilevato e portato a te per il successivo debug.

DISCLAIMER: non affiliato con il servizio / azienda.


1
503 Servizio non disponibile
— Rax

0

Puoi provare Atatus - Si tratta di un nuovo servizio di monitoraggio degli errori JavaScript insieme a Real User Monitoring (RUM) per le moderne app Web.

Non solo catturiamo gli errori, ma anche gli eventi dell'utente che hanno causato l'errore. Questo ti dà i passaggi per riprodurre l'errore alla tua fine.

Oltre alla cattura degli errori, catturiamo anche il tempo di caricamento della pagina e lo mostriamo in diverse prospettive: Geo, Browser, Drill down della pagina, Istogramma della pagina, Monitoraggio Ajax e Monitoraggio delle transazioni.

https://www.atatus.com/

Documenti disponibili: https://www.atatus.com/docs

Disclaimer: sono uno sviluppatore web di Atatus.


1
Ho integrato Ataus e poi ho provato qualcosa come foo.bar = '' che ha causato un'eccezione. Ma non riesco a vedere nulla nella dashboard di Atatus.
— vmachacek,

Potresti inviarci un'email?
— Fizer Khan,

5
Spina senza vergogna. Gli annunci dovrebbero essere limitati al lato destro.
— Sarà il

0

La libreria non rilevata è un buon modo gratuito per catturare tutti gli errori JS, inclusi i rifiuti non gestiti.


-2

Potresti voler dare un'occhiata a questo nuovo servizio, http://rescuejs.com/ . https://bugsnag.com/

Ti permette di registrare tutti i tuoi errori javascript senza scrivere tu stesso il codice lato server. Tiene inoltre traccia delle versioni del browser e così via.

Non sono sicuro che li considererei "pronti per l'impresa" al 100%, ma vale sicuramente la pena provarli.


8
È stato chiuso. Se provi a registrarti ora ricevi il messaggio "Grazie per il tuo interesse, sfortunatamente Rescue.js non sta più lavorando attivamente".
— Giorno
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.