Lo so, sono 4 anni di ritardo alla festa qui , ma sentivo ancora l'impulso di aggiungere i miei 2 centesimi.
Come sottolineato da Eldar, è possibile utilizzare e.message per ottenere il messaggio dell'eccezione. Tuttavia, in Chrome, Firefox e IE10 +, puoi anche ottenere la traccia dello stack usando e.stack. La traccia dello stack includerà il numero di file e di riga dell'eccezione.
Quindi, per assemblare una stringa con informazioni eccezione, si potrebbe scrivere qualcosa di simile:
var exmsg = "";
if (e.message) {
exmsg += e.message;
}
if (e.stack) {
exmsg += ' | stack: ' + e.stack;
}
noti che si otterrà solo una traccia dello stack se
- l'eccezione è stato gettato dal browser (come in risposta a un errore di sintassi );
- l'oggetto eccezione è un oggetto Error o ha l'oggetto Error come prototipo.
Quindi, basta lanciare una stringa (lanciare "Eccezione !!") non ti darà una traccia di stack.
Per fare un po 'di più, per catturare tutte le eccezioni non rilevate, si utilizzerà un gestore window.onerror (simile al gestore di Application_Error .Net in global.asax).Lo svantaggio di questo era (e in gran parte lo è ancora) che questo non ti dava accesso all'oggetto di eccezione reale, quindi non si poteva ottenere la traccia dello stack. Riceverai solo il messaggio, l'url e il numero della linea.
Recentemente, lo standard è stato esteso per darvi la colonna (ottimo per i file minified) e l'oggetto eccezione così: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#errorevent
Proprio ora (aprile 2014), solo Chrome 32 implementa tutto questo. IE10 + ti fornisce la colonna ma non l'oggetto di eccezione. Firefox 28 ti dà ancora solo messaggio, url e numero di linea. Spero che questo migliorerà presto. Ho scritto su questo per il progetto JSNLog, a: http://jsnlog.com/Documentation/GetStartedLogging/ExceptionLogging
(disclaimer: io sono l'autore di JSNLog e jsnlog.com)
In secondo luogo, l'oggetto eccezione .NET supporta eccezioni interne. Ha anche una proprietà Data in modo che sia possibile associare coppie di valori chiave ad esempio a valori variabili. Ho perso questo tipo di errore nell'oggetto Errore JavaScript, quindi ho creato il mio oggetto Exception, anch'esso come parte del progetto JSNLog. Si trova nel file jsnlog.js nel progetto github jsnlog.js (https://github.com/mperdeck/jsnlog.js).
Descrizione e ': http://jsnlog.com/Documentation/JSNLogJs/Exception
Infine una spina spudorato - il progetto JSNLog cui sto lavorando consente di inserire nel vostro logger JavaScript, e inserisce automaticamente i messaggi di log nel log lato server esistente. Quindi, per registrare le eccezioni JavaScript con i loro stack al vostro log lato server, è sufficiente scrivere:
try {
...
} catch (e) {
JL().fatalException("something went wrong!", e);
}
Questo non funziona sul lato server. Inoltre, non è UX moderno. –