Sentry-javascript: Alte Browser führen dazu, dass [object Event] protokolliert wird

Erstellt am 3. Aug. 2015  ·  50Kommentare  ·  Quelle: getsentry/sentry-javascript

Genau wie in diesem Thread zu Stack Overflow beschrieben, führen bestimmte Ereignisse, die an window.onerror gesendet werden, dazu, dass [object Event] als Nachricht protokolliert wird und nicht viel mehr. Es wäre schön, wenn Sentry diese alten Event -Objekte erkennen und einige Details aus ihnen herausholen könnte, damit das, was bei Sentry protokolliert wird, etwas Verständliches ist, auf das wir reagieren und versuchen können, es zu beheben.

Hilfreichster Kommentar

@rollokb – irgendwelche Neuigkeiten dazu?

Alle 50 Kommentare

Ein bestimmtes Beispiel aus unseren Protokollen zeigt die folgenden Informationen:

  • Browser: Delphin 3.0
  • Gerät: Samsung GT-S8600
  • Betriebssystem: Bada 2.0

Ich kann bestätigen, dass die Android-Browser von Android 4.1 bis 4.4, anscheinend von Android-Telefonen von Drittanbietern (z. B. Samsung, HTC) in ähnlicher Weise von diesem Problem betroffen sind. Ich kann nicht bestätigen, ob Nexus-Telefone betroffen sind.

Dies wäre ein großartiges Feature, das man bekommen könnte, und es scheint nicht relativ schwierig zu implementieren zu sein. Vielleicht eine schnelle Überprüfung, ob message.toString() == '[object Event]' und dann eine for-in -Schleife, um auf die Eigenschaften des Ereignisobjekts zuzugreifen. Dies wäre großartig beim Debuggen von Problemen mit einer Website in Android 4.1 - 4.4.

@d10 - Ich habe damit experimentiert, aber ich kann keinen echten Browser finden, um zu überprüfen, ob es funktioniert. Ich habe versucht, Android 4.1 – 4.4 auf BrowserStack zu emulieren und den Standard-Android-Browser zu verwenden, aber sie melden problemlos Fehler.

Das wäre ein tolles Feature! Wir haben die gleichen Probleme mit alten Browsern!

Das hat mich verrückt gemacht, also habe ich einen Patch für dieses https://github.com/rollokb/raven-js/tree/feat/old-webkit-Event-handling geschrieben

Ich werde es ein wenig in der Produktion testen, bevor ich einen Pull-Request sende.

@rollokb – dieser Commit sieht großartig aus. Lassen Sie mich wissen, wie es in der Produktion läuft; Ich würde mich freuen, es danach in Master zusammenzuführen.

Toll! Es macht mich auch wahnsinnig! +1

Scheint in der Produktion gut zu funktionieren.

Bearbeiten:

Scheint gut zu funktionieren, aber nur mit Ereignissen, die ich selbst ausgelöst habe. Immer noch absolut keine Informationen über den Inhalt des Events.

Scheint gut zu funktionieren, aber nur mit Ereignissen, die ich selbst ausgelöst habe. Immer noch absolut keine Informationen über den Inhalt des Events.

Das Problem liegt wahrscheinlich hier:

+        for (var property in event) {
+            if (event.hasOwnProperty(property)) {
+                options.extra[property] = event[property];
+            }
+         }

Wenn Sie hasOwnProperty markieren, erhalten Sie keine Eigenschaften, die von Event.prototype abgeleitet sind. Wenn diese betroffenen Browser nicht so vorgehen wie Sie in Ihrem Test – indem sie Eigenschaften direkt auf dem von ihnen erstellten Event -Objekt platzieren – sehen wir keine Daten.

Die Kehrseite ist, wenn Sie dieses Häkchen entfernen, erhalten wir eine Reihe von Eigenschaften, die nichts mit dem Fehler zu tun haben. Aber es könnte sehenswert sein, wie das aussieht.

Du hast wahrscheinlich Recht. Das hat mich beim Testen mit PhantomJS überrascht.

Zweig aktualisiert
https://github.com/rollokb/raven-js/blob/feat/old-webkit-Event-handling/src/raven.js#L1109 -L1121

Cool. Nochmals, ich weiß es zu schätzen, dass Sie sich damit beschäftigen.

Etwas unangebracht, aber wie wird PhantomJS in dieses Projekt geladen? Es scheint Event-Eigenschaften falsch zu handhaben (dh es sieht alle Event-Requisiten als seine eigenen).

Über kmiyashiro/grunt-mocha

https://github.com/getsentry/raven-js/blob/master/Gruntfile.js#L193

Es scheint Event-Eigenschaften falsch zu handhaben (dh es sieht alle Event-Requisiten als seine eigenen).

Sie könnten versuchen, ein Ereignisobjekt zu verspotten, das sich genauso verhält wie in Chrome/einem anderen Browser. (Hoffentlich fühlen sich die älteren Browser, die diese Objekte senden, ähnlich.)

Sie können auch versuchen, die Tests zum Ausführen von Phantom2 zu veranlassen, um zu sehen, ob das Verhalten genauer ist. Ich glaube, sie führen gerade 1.9.8 aus.

@rollokb – irgendwelche Neuigkeiten dazu?

Ich habe heute Hunderte davon von Facebook Browser v80 auf Android 4 bekommen. Das ist nicht wirklich alt, oder?

Wir erhalten viele dieser Fehler auf Android 4.x mit Android Browser

Ich habe heute Hunderte davon von Facebook Browser v80 auf Android 4 bekommen. Das ist nicht wirklich alt, oder?

Ich bin mir ziemlich sicher, dass "Facebook Browser" nur Facebook ist, was auch immer der interne Webbrowser ist.

Grundsätzlich tritt dieser Fehler nur in einigen internationalen Versionen von Android-Telefonen auf. Werfen Sie einen Blick auf Ihre Geräteliste, wenn Sie solche Fehler sehen, Sie werden feststellen, dass sie Gerätecodes wie Samsung GT-S8600 haben – die keine nordamerikanischen/westlichen Modelle sind.

Sie scheinen einen Fork eines Browsers zu verwenden, der vorgibt, "Chrome Mobile" oder "Android Browser" zu sein (Benutzeragenten können leicht gefälscht werden), aber anscheinend eine andere Fehlerobjektsignatur haben. Es fiel mir schwer, den Fehler zu reproduzieren (einschließlich des Versuchs, einige dieser Telefone für den Einsatz im Büro zu kaufen), aber ich werde es wahrscheinlich bald noch einmal versuchen.

Wir bekommen diese Fehler nicht bei seltenen Browsern, wir haben sie gerade unter Windows 10 mit Chrome 51.0.2704 bekommen

Hallo Leute!

Außerdem habe ich den Raven-Bericht

...
"exception": {
  "values": [
    {
      "value": "[object Event]",
      "stacktrace": {
        "frames": [
          ...
        ]
      }
    }
  ]
}

im mobilen Browser auf Android. Der Benutzeragent ist
Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; GT-N7100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

+1 dafür

Ab 3.7.0 generieren wir also jetzt synthetische Ablaufverfolgungen für [object Event] und andere abgefangene Nicht-Fehler-Objekte. Ich würde empfehlen, 3.7.0 auszuprobieren und zu sehen, welche Ergebnisse Sie erhalten.

@benvinegar Ich habe 3.7.0 installiert, bekomme aber diesen Fehler

Ich verwende den nächsten Hack als vorübergehende Lösung:

    Raven.install();

    if (Raven._processException) {
        const oldProcessException = Raven._processException;

        Raven._processException = function (event, message) {
            if (message && typeof message === 'object') {
                // detect that it's an event
                if (String(message) === '[object Event]') {
                    // message
                    message = stringifyEvent(message);

                    // type
                    event = event || 'event';
                } else {
                    // stringify the other objects
                    try {
                        message = JSON.stringify(message);
                    } catch (e) {
                        //
                    }
                }

                arguments[0] = event;
                arguments[1] = message;
            }

            return oldProcessException.apply(this, arguments);
        };
    }

    function stringifyEvent (event) {
        const data = {
            eventPhase: event.eventPhase,
            type: event.type,
            isTrusted: event.isTrusted,
            returnValue: event.returnValue,
            timeStamp: event.timeStamp
        };

        if (event.target) {
            data.target = {
                src: event.target.src,
                tagName: event.target.tagName || 'UNKNOWN_HTMLELEMENT',
                className: event.target.className,
                readyState: event.target.readyState
            };
        }

        if (event.path) {
            data.path = event.path.map((el) => {
                const tagName = el.tagName || 'UNKNOWN_HTMLELEMENT';
                const className = (el.className || '').replace(/\s+/, '');

                // DIV.class-1.class-2
                return `${ tagName }.${ className }`;
            });
        }

        return JSON.stringify(data);
     }

@webschik Sieht aus wie ein Tippfehler in dieser Zeile:

return `${ tagName }.${ className }`;

Und sind Sie sicher, dass diese Konstruktion erlaubt ist:

data.path = event.path.map((el) => {

UP: Bei diesem Fix wird der Fehler „Unerwartetes Token =>“ angezeigt

@webschik

2016-09-23 12 45 43

@AlexanderMatveev , es ist die ES2015-Syntax.
Sie können es ersetzen

@webschik Diesen Hack hinzugefügt und sieht so aus, als hätte sich nichts geändert, es wird immer noch nur der Fehler "[object Event]" angezeigt.

@AlexanderMatveev , es ist komisch, weil das für mein Projekt funktioniert. Wahrscheinlich brauchen wir dort weitere Untersuchungen

@webschik

Hier ist die Reihenfolge der Skripte:

<script type="text/javascript" src="[raven.min.js version 3.7.0]"></script>
<script>
    Raven.config('https://[...]@sentry.io/[...]', {
        release: '[...]'
    }).install();
</script>
<script type="text/javascript" src="[fix.js without first Raven.install() line]"></script>

@benvinegar Ich habe 3.7.0 installiert, bekomme aber diesen Fehler

Du würdest es trotzdem bekommen. Der Unterschied besteht darin, dass ein synthetischer Stack-Trace generiert werden soll. Wenn es jedoch abgefangen wird, weil es zu window.onerror sprudelt, ist der Stack-Trace möglicherweise nicht hilfreich (aber es würde Ihnen sagen, dass es so abgefangen wird).

Hatte das gleiche mit Raven 3.6.1 auf gehostetem Sentry für UA: Mozilla/5.0 (Linux; U; Android 3.1; en-gb; GT-P7500 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13

Ich habe auch mehrere Ereignisse, die meisten davon sind von einem Android- oder Facebook-Browser. Sogar Facebook 95.0, das neu sein sollte, löst diesen Fehler aus. Android 4. . ist das Hauptbetriebssystem und viele der Geräte, auf denen es gemeldet wird, sind Samsung-GT [etwas]. Ich verwende die Version 3.7.0.

Wir haben dies auch von einem supergenerischen Benutzeragenten bekommen, keine speziellen Geräte:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36

Rabe 3.9.0

passiert immer noch auf 3.9.1 ein paar hundert mal am tag, auf facebook & android browser.name
keinerlei Stacktrace.

sollen wir es einfach ignorieren?

Hier gilt das gleiche.

So wie alle hier. Falls diese Info hilft:

image

UA: Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8190L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/87.0.0.17.79;]

Browser: Facebook 87.0.0

das gleiche hier, eine Lösung?? :S

Ich habe das gleiche Problem

image

Ich habe derzeit das gleiche Problem ... es gibt viele dieser Fehler und ich erreiche sehr bald die Wachschwelle 😞

Ich bekomme Dutzende dieser Probleme, alle mit Chrome 45 unter Windows 10.

Es passiert immer noch auf Raven 3.15.0, auf Facebook und im Android-Browser
Sollen wir es einfach ignorieren?

Hat jemand eine Lösung gefunden? In meinem Fall erscheint dies im Wachposten:

`[Objekt Ereignis]

bei trimHeadFrames(./node_modules/raven-js/src/raven.js:562:1)
bei _logDebug(./node_modules/raven-js/src/raven.js:488:1)
bei G._promiseRejectionHandler(./node_modules/raven-js/src/raven.js:430:1)‘

unhandledPromiseRejection: wahr

User-Agent: Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, wie Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.8.1112 Mobile Safari /537.36

Gerätefamilie: vivo 1610
Gerätemodell: 1610
Gerätemarke: vivo

Android 6.0.1

UC-Browser 12.5.8

Meine raven-js-Client-Version ist: 3.25.0

Ich habe einen Screenshot des Fehlers angehängt (tritt oft mit vielen alten Browsern auf)
raven-screenshot

Dies kann im neuen SDK mithilfe von Ereignishinweisen und benutzerdefinierter Fehlerbehandlung behoben werden.

@kamilogorek

Dies kann im neuen SDK mithilfe von Ereignishinweisen und benutzerdefinierter Fehlerbehandlung behoben werden.

Können Sie das näher ausführen? Irgendwelche Links zu Dokumenten?
Welche Version brauchen wir mindestens?
Ich bevorzuge für dieses Problem ein Code-Snippet dieser Einstellungen für „Ereignishinweise“ und „benutzerdefinierte Fehlerbehandlung“.

Danke!

@hiroshi siehe https://github.com/getsentry/sentry-javascript/issues/1401#issuecomment -418631326
Es ist eine Funktion des neuen Sentry-Javascript SDK, das heute als RC Today veröffentlicht wurde. Es wird nicht zurück nach raven-js/node portiert.

Hallo, ich sehe immer wieder einen Fehler wie diesen in Sentry:

exception | Error: [object Event]

Es ist kein Stack-Trace angehängt und keine hilfreichen Informationen. Aus LogRocket-Sitzungen geht hervor, dass Benutzer keine Probleme haben. Ich sehe einige blockierte Anfragen an Facebook und Google Tag Manager, daher vermute ich, dass dort eine Blocker-Erweiterung installiert ist.
Es ist ein wiederkehrender Fehler von einer Person, die Chrome 75 verwendet, kein sehr alter Browser.
Irgendwelche Vorschläge, wie ich dieses Problem lösen würde?

Danke

Hinweis: @sentry/browser-Version 5.3.0

@burtyish Das Aktualisieren auf die neueste Version ist der erste gute Schritt. Wir haben _viele_ Änderungen in Bezug auf dieses Verhalten in 5.7.0 eingeführt

@kamilogorek Danke!
Ich sehe jetzt einen viel informativeren Fehler, nachdem ich auf sentry.javascript.browser v5.12.1 aktualisiert habe.
Und ich habe auch einen Stacktrace!

@burtyish genial! :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen