2013-10-13 13 views
8

Ho riscritto un'applicazione Web utilizzando angolare. Ma ora ho il problema che non è così semplice come window.onerror = function(...) { ... } inviare errori del client al server. Ma questo è veramente utile per rilevare errori.AngularJS: registrazione serveride degli errori lato client

ho aggiunto un gestore di eccezioni personalizzato per angolare utilizzando il seguente codice

Ma questo non permetterà me per ottenere la posizione in cui l'eccezione è venuto da. Qualche suggerimento/esperienza su come affrontare questo? Mi piacerebbe anche una soluzione che sia in grado di funzionare con http://stacktracejs.com/

+0

Per riferimento, ora possiamo avere le informazioni di stack trace dall'oggetto eccezione. exception.message e exception.stack. Ulteriori informazioni possono essere trovate qui: http://www.ozkary.com/2016/04/angularjs-log-client-errors-to-server.html – ozkary

+0

vedere qui per una soluzione di stacktrace-to-home funzionante ➝ http://www.bennadel.com/blog/2542-logging-client-side-errors-with-angularjs-and-stacktrace-js.htm –

risposta

10

Attualmente sto usando TraceKit che sembra funzionare abbastanza bene.

Basta aggiungere questo alla vostra startup-codice angolare

$provide.decorator("$exceptionHandler", function($delegate) { 
    return function(exception, cause) { 
     TraceKit.report(exception); 
     $delegate(exception, cause); 
    }; 
}); 

+ questo da qualche parte

TraceKit.report.subscribe(function(errorReport) { 
    var msg = 'msg: ' + errorReport.message + '\n\n'; 
    msg +="::::STACKTRACE::::\n" 
    for(var i = 0; i < errorReport.stack.length; i++) { 
     msg += "stack[" + i + "] " + errorReport.stack[i].url + ":" + errorReport.stack[i].line + "\n"; 
    } 
    // log to server 
    ... 
} 
0

Disclaimer: Im sviluppatore di applicazioni basate su django.

Posso proporvi di utilizzare la soluzione basata su raven. È in registrazione il servizio di aggregazione con molti binding (anche javascript) e l'ottima applicazione di monitoraggio sentry basata su django.

5

Potremmo usare stacktrace.js by Eric Wendelin

  1. AngularJS ha una buona gestione degli errori.
  2. stacktrace.js tenta di risolvere il problema importante di ottenere le informazioni corrette sull'errore su tutti i browser.

Quindi è possibile creare un wrapper angolare attorno a stacktrace.js che offre una gestione completa degli errori.

Di seguito sono riportati i 2 post del blog che spiegano molto bene, come registrare l'errore JS lato client sul lato server utilizzando AngularJS e stacktrace.js.

  1. http://engineering.talis.com/articles/client-side-error-logging/
  2. http://www.bennadel.com/blog/2542-logging-client-side-errors-with-angularjs-and-stacktrace-js.htm