Möchten Sie eine Funktion anfordern oder einen Fehler melden?
Fehler.
Wie ist das aktuelle Verhalten?
Manchmal (nicht immer) wird die Eigenschaft message
des Fehlers als [object ErrorEvent]
protokolliert. Ich folgte der Standardimplementierung von Raven in Angular wie hier beschrieben: https://docs.sentry.io/clients/javascript/integrations/angular/.
Was ist das erwartete Verhalten?
Eine normale Fehlermeldung anzeigen.
Rabe 3.17.0
Winkel 4.3.1
Webpack bauen
CLI wird nicht verwendet
CDN-Version
Gibt es irgendwo in den Angular-Dokumenten eine Definition von ErrorEvent
? Anscheinend "erbt" dies Error
auf die richtige Weise.
Das Problem könnte in der traceKitWindowOnError()
-Methode von TraceKit liegen. Es scheint nicht zu berücksichtigen, dass das Argument message
ein ErrorEvent
(siehe MDN-Dokumente ).
@benvinegar Es gibt einige Dokumente hier auf ErrorEvent
: https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent
Davon betroffen sind auch diese Benutzer:
https://forum.sentry.io/t/reporting-object-errorevent/1807
[email protected] (aber schon seit einiger Zeit bei älteren Versionen)
Winkel 4.x.
Verwenden der CLI
Gleiches gilt hier für Ionic 3 und [email protected]
<script>
undefined.foo();
</script>
^ Dies in Ihrem HTML wird in Safari per Wachposten als [object ErrorEvent]
angemeldet. Die richtige Nachricht wäre TypeError: undefined is not an object (evaluating 'undefined.foo')
.
Wir haben ein externes Skript, das Code über ein Skript-Tag einfügt, das versucht, einen Iframe zu erstellen, der jedoch durch Safari blockiert wird. Da der Fehler vom injizierten Skript-Tag herrührt, meldet der Wachposten nur [object ErrorEvent]
Ein weiterer Fehler von Sentry, der nur als [object Event]
gemeldet wurde, stammt vom Flowplayer. Der Flowplayer tut es
jQueryElement.trigger('error', [api, {code: 5}]);
Sie können es reproduzieren, indem Sie jQuery einbetten und einfach Folgendes tun:
$('div:first').trigger('error')
Sentry sieht so etwas
Sicher, das ist nicht sehr serialisierbar, aber ein Fehler wie error on element from jQuery - context <div class="foo><div class="bar" ...
wäre viel hilfreicher als [object Event]
Auch davon betroffen.
@daangeerdink @jdelaune @rosslavery @tgensol Könnte jemand einen möglichst kleinen Code bereitstellen, der mir helfen könnte, dies zu reproduzieren?
@sod Ich habe es gerade überprüft und Safari 10.1.2 liefert in dem oben erwähnten Szenario die richtige Meldung.
Ich persönlich kann keinen Repro bereitstellen, da die Fehler so undurchsichtig sind, dass ich nicht erkennen kann, welcher Teil meiner Codebasis den Fehler auslöst. Ich habe keine Stapelspuren, mit denen ich arbeiten kann, noch eine Fehlermeldung, um herauszufinden, ob es sich um meinen Code oder eine Bibliothek eines Drittanbieters usw. handelt.
Hoffentlich hat jemand anderes ein vereinfachtes Beispiel, das er bereitstellen kann. Tut mir leid, ich könnte Ihnen nicht weiterhelfen.
Wir haben auch dieses Problem. Ich kann einige Daten aus den letzten 10 Tagen teilen (22.000 Ereignisse dieses Typs, 13.000 Benutzer). Ich hoffe, es hilft Ihnen, es zu reproduzieren.
@kamilogorek Wir haben 2 Millionen Fehler dieses Typs. Ich dachte, es sei unser Problem, aber wir konnten es nicht richtig verfolgen.
Ich habe das Problem gefunden. ErrorEvent
wird von der Funktion isError
util, die hier zu finden ist, nicht als Fehler behandelt. Der Einfachheit halber füge ich auch die Funktionsdefinition ein:
function isError(value) {
switch ({}.toString.call(value)) {
case '[object Error]':
return true;
case '[object Exception]':
return true;
case '[object DOMException]':
return true;
default:
return value instanceof Error;
}
}
Ich habe in meiner Konsole einen kurzen Test durchgeführt, um festzustellen, ob diese Funktion für ErrorEvent
true
isError
wird in der Methode captureException
verwendet, um zu bestimmen, ob der Ausnahmeparameter ein Fehler oder einfach eine Nachricht ist. captureException
sendet Ausnahmen mit captureMessage
an das Dashboard, wenn die Ausnahme nicht tatsächlich ein Fehler ist. In diesem Fall berechnet Raven keine Stapelverfolgung oder "verarbeitet" die Ausnahme. Es schickt es einfach so wie es ist.
Gibt es einen Grund, warum wir isError
nicht aktualisieren sollten, um true für ErrorEvent
Objekte zurückzugeben?
Gibt es einen Grund, warum wir isError nicht aktualisieren sollten, um true für ErrorEvent-Objekte zurückzugeben?
Ja. Weil es eigentlich kein Nachkomme von Error
(es ist ein Nachkomme von Event
). Es hat zum Beispiel keine stack
-Eigenschaft (AFAICT, das in der Konsole herumspielt). Dies bedeutet, dass es möglicherweise nicht richtig verarbeitet wird.
Es wäre großartig, ein Beispiel dafür zu sehen, wie dieser Fehler live generiert wird, damit wir herausfinden können, wie er am besten verarbeitet werden kann.
Der Konstruktor für ErrorEvent
nimmt ein Error
, sodass Sie sie leicht wie folgt behandeln können:
if (isErrorEvent(ex)) {
ex = ex.error;
}
Sie können die Konstruktionsdefinition hier sehen . Schauen Sie sich insbesondere den Hash ErrorEventInit
. Es ist ein optionaler Parameter, daher denke ich, dass die oben veröffentlichte Lösung den Fall nicht behandelt, in dem ein ErrorEvent.error
undefiniert ist.
Klar, ich glaube, das kann gelöst werden - ich meinte nur, dass es nicht so einfach ist, nur isError
zu true
.
Ich verstehe. Ich werde in ein paar Minuten eine PR machen.
Behoben in 3.19.x
Danke @shcallaway! 👍
Scheint, als würden wir dieses Problem immer noch auf 3.19.1
🤔 bekommen
@PhilippSpo Von welchem Browser kommt dieses Ereignis? ErrorEvent
wird in einigen alten mobilen Browsern und im Internet Explorer nicht unterstützt, daher mussten wir auf die reguläre Lösung zurückgreifen.
@kamilogorek Chrome 61.0.3163
Ich sehe es auch auf Chrome 61. 😕 Ich werde versuchen, es bald zu untersuchen.
Danke @shcallaway
Kommt auch unter Safari 11.0, Mac OS 10.13 vor
Es sieht so aus, als ob traceKitWindowOnError Eingabeparameter nicht korrekt verarbeitet, wenn der Parameter 'message' ein ErrorEvent-Objekt ist:
und 'ex' ist undefiniert. Anschließend wird notifyHandlers mit einem Objekt aufgerufen, bei dem das Feld 'message' ein ErrorEvent und keine Zeichenfolge ist:
Dies erzeugt, wenn es in
Vielen Dank für die Untersuchung @ michal-rumanek, ich werde versuchen, dieses Problem bald zu lösen (ich habe diese Woche keine Freizeit).
@kamilogorek , irgendwelche Fortschritte? ;-);
Hallo, ich bekomme viele dieser Fehler [object Object]
.
Winkel 4
Chrome 62.0.3202
Raven-js 3.20.1
Hilfreichster Kommentar
Ich habe das Problem gefunden.
ErrorEvent
wird von der FunktionisError
util, die hier zu finden ist, nicht als Fehler behandelt. Der Einfachheit halber füge ich auch die Funktionsdefinition ein:Ich habe in meiner Konsole einen kurzen Test durchgeführt, um festzustellen, ob diese Funktion für
ErrorEvent
trueisError
wird in der MethodecaptureException
verwendet, um zu bestimmen, ob der Ausnahmeparameter ein Fehler oder einfach eine Nachricht ist.captureException
sendet Ausnahmen mitcaptureMessage
an das Dashboard, wenn die Ausnahme nicht tatsächlich ein Fehler ist. In diesem Fall berechnet Raven keine Stapelverfolgung oder "verarbeitet" die Ausnahme. Es schickt es einfach so wie es ist.Gibt es einen Grund, warum wir
isError
nicht aktualisieren sollten, um true fürErrorEvent
Objekte zurückzugeben?