53 Stimmen

Wie man Ausnahmen in JavaScript protokolliert

Als C#-Entwickler bin ich an folgenden Stil der Ausnahmebehandlung gewöhnt:

try
{
    throw SomeException("hahahaha!");
}
catch (Exception ex)
{
    Log(ex.ToString());
}

Ergebnis
------

SomeNamespace.SomeException: hahahaha!
    at ConsoleApplication1.Main() in ConsoleApplication1\Program.cs:line 27

Es ist wirklich einfach und sagt mir dennoch alles, was ich über die Ausnahme wissen muss und wo sie aufgetreten ist.

Wie erreiche ich das Äquivalent in JavaScript, wo das Ausnahmeobjekt selbst nur ein String sein könnte? Ich möchte wirklich in der Lage sein, die genaue Codezeile zu kennen, an der die Ausnahme aufgetreten ist. Allerdings protokolliert der folgende Code überhaupt nichts Nützliches:

try
{
    var WshShell = new ActiveXObject("WScript.Shell");
    return WshShell.RegRead("HKEY_LOCAL_MACHINE\\Some\\Invalid\\Location");
}
catch (ex)
{
    Log("Ausnahme abgefangen: " + ex);
}

Ergebnis
------

Ausnahme abgefangen: [object Error]

BEARBEITEN (erneut): Nur um es klarzustellen, dies ist für interne Anwendung, die intensiv JavaScript verwendet. Ich suche nach einem Weg, nützliche Informationen aus JavaScript-Fehlern zu extrahieren, die im Produktionssystem auftreten können - ich habe bereits einen Protokollierungsmechanismus, möchte nur einen Weg finden, einen sinnvollen String zum Protokollieren zu erhalten.

0voto

Quentin Punkte 850700

0 Stimmen

Ich bin wirklich daran interessiert, zu erfahren, wie man nützliche Informationen aus der Ausnahme extrahiert - ich habe meine Frage umformuliert.

0voto

Kirtan Punkte 20775

Sie können Logging-Tools wie Yahoo! UI Library - Logger verwenden, um Fehler/Informationsmeldungen zu protokollieren.

0voto

Chetan Jain Punkte 90

Ich habe eine praktische Funktion dafür geschrieben

const logError = (e: any) => {
   if (console.error) console.error(e, e.stack);
   else console.log(e)
}

0voto

Zach Lysobey Punkte 13835

Die moderne bewährte Praxis (soweit ich das verstehe) besteht darin, den Fehler als separates Argument zu console.error (oder console.log, console.warn, usw.) zu protokollieren.

try {
  maybeThrows()
} catch (e) {
  console.error('Es hat einen Fehler geworfen', e);
}

Das Ausprobieren dieses Ansatzes in der Praxis:

try {
  throw Error('err') // Fehlerobjekt
} catch (e) {
  console.error('Es hat einen Fehler geworfen', e); // Es hat einen Fehler geworfen Error: err
}

try {
  throw 'up' // kein Fehlerobjekt
} catch (e) {
  console.error('Es hat einen Fehler geworfen', e); // Es hat up geworfen
}

Ich habe das oben Genannte in Chrome und Node v16 ausgeführt. Beachten Sie, dass Node nicht einen Stapelrückverfolgung für throw 'up' eingefügt hat, aber für den richtigen Fehler. Chrome hat den Stapel für beide eingefügt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X