Fehlerverfolgung in der React-Anwendung mit Sentry

Fehlerverfolgung in der React-Anwendung mit Sentry

Heute werde ich Ihnen erzĂ€hlen, wie man Fehler in Echtzeit in einer React-Anwendung verfolgt. Eine Benutzerschnittstellenanwendung wird normalerweise nicht zur Fehlerverfolgung verwendet. Einige Unternehmen verschieben oft die Fehlerverfolgung und kĂŒmmern sich spĂ€ter darum, nachdem die Dokumentation, Tests und mehr erledigt sind. Aber wenn Sie Ihr Produkt zum Besseren verĂ€ndern können, dann tun Sie es einfach!

1. Warum benötigen Sie Sentry?

Ich nehme an, Sie sind daran interessiert, Fehler im Produktionsprozess zu verfolgen.

Glauben Sie, das reicht nicht aus?

Gut, lassen Sie uns die Einzelheiten betrachten.

HauptgrĂŒnde fĂŒr die Verwendung von Sentry fĂŒr Entwickler:

  • Reduziert Risiken beim Bereitstellen von fehlerhaftem Code.
  • UnterstĂŒtzung fĂŒr das QA-Team beim Testen des Codes.
  • Erhalten von schnellen Benachrichtigungen ĂŒber Probleme.
  • Möglichkeit zur schnellen Behebung von Fehlern.
  • Erhalten einer benutzerfreundlichen Darstellung von Fehlern im Admin-Panel.
  • Fehler nach Nutzer- / Browsersegmenten sortieren.

HauptgrĂŒnde fĂŒr CEOs / Projektleiter.

  • Kostenersparnis (Sentry kann auf Ihren Servern installiert werden).
  • Erhalten von Benutzerfeedback.
  • Verstehen, was in Ihrem Projekt in Echtzeit schiefgeht.
  • Verstehen, wie viele Probleme die Leute mit Ihrer Anwendung haben.
  • Hilfe bei der Suche nach Stellen, an denen Ihre Entwickler Fehler gemacht haben.

Ich denke, dass die Entwickler in erster Linie an diesem Artikel interessiert wĂ€ren. Sie können diese Liste von GrĂŒnden auch verwenden, um das Management zu ĂŒberzeugen, Sentry zu integrieren.

Seien Sie vorsichtig mit dem letzten Punkt in der Liste fĂŒr Unternehmen.

Sind Sie schon interessiert?

Fehlerverfolgung in der React-Anwendung mit Sentry

Was ist Sentry?

Sentry ist eine Open-Source-Anwendung zur Fehlerverfolgung, die Entwicklern hilft, AbstĂŒrze in Echtzeit zu verfolgen und zu beheben. Vergessen Sie nicht, dass die Anwendung auch die Effizienz steigert und die Benutzerfreundlichkeit verbessert. Sentry unterstĂŒtzt JavaScript, Node, Python, PHP, Ruby, Java und andere Programmiersprachen.

Fehlerverfolgung in der React-Anwendung mit Sentry

2. Melden Sie sich an und erstellen Sie ein Projekt.

  • Öffnen Sie Ihr Sentry-Konto. Möglicherweise mĂŒssen Sie sich anmelden. (Ich möchte darauf hinweisen, dass Sentry auf Ihren Servern installiert werden kann.)
  • Der nĂ€chste Schritt ist, ein Projekt zu erstellen.
  • WĂ€hlen Sie Ihre Sprache aus der Liste aus. (Wir werden React auswĂ€hlen. Klicken Sie auf 'Projekt erstellen')

Fehlerverfolgung in der React-Anwendung mit Sentry

Richten Sie Ihre Anwendung ein. Ein grundlegendes Beispiel, wie Sentry in einen Container integriert wird, sehen Sie unten:

import * as Sentry from '@sentry/browser';
// Sentry.init({
//  dsn: "<https:>"
// });
// sollte vor der Verwendung hier aufgerufen werden
// idealerweise sogar bevor Ihre React-App gerendert wird

class ExampleBoundary extends Component {
    constructor(props) {
        super(props);
        this.state = { error: null };
    }

    componentDidCatch(error, errorInfo) {
      this.setState({ error });
      Sentry.withScope(scope =&gt; {
        Object.keys(errorInfo).forEach(key =&gt; {
          scope.setExtra(key, errorInfo[key]);
        });
        Sentry.captureException(error);
      });
    }

    render() {
        if (this.state.error) {
            // fallback UI rendern
            return (
              <a onclick="{()" > Sentry.showReportDialog()}&gt;Feedback melden</a>
            );
        } else {
            // wenn kein Fehler vorliegt, Kinder unverändert rendern
            return this.props.children;
        }
    }
}

Sentry verfĂŒgt ĂŒber einen hilfreichen Assistenten, der Ihnen hilft zu verstehen, was als NĂ€chstes zu tun ist. Sie können die folgenden Schritte ausfĂŒhren. Ich möchte Ihnen zeigen, wie Sie Ihren ersten Fehlerbehandler erstellen. Großartig, wir haben ein Projekt erstellt! Lassen Sie uns zum nĂ€chsten Schritt ĂŒbergehen.

3. Integration von React und Sentry

Sie mĂŒssen das npm-Paket in Ihr Projekt installieren.

npm i @sentry/browser

Initialisieren Sie Sentry in Ihrem Container:

Sentry.init({
 // dsn: #dsnUrl,
});

Die DSN finden Sie in Projekte -> Einstellungen -> Client-SchlĂŒssel. Sie können die Client-SchlĂŒssel in der Suchzeile finden.

Fehlerverfolgung in der React-Anwendung mit Sentry

componentDidCatch(error, errorInfo) {
  Sentry.withScope(scope => {
    Object.keys(errorInfo).forEach(key => {
      scope.setExtra(key, errorInfo[key]);
    });
    Sentry.captureException(error);
 });
}

4. Verfolgung des ersten Fehlers

Ich habe zum Beispiel eine einfache Musik-App mit der Deezer-API verwendet. Sie können dies sehen. hier. Wir mĂŒssen einen Fehler erzeugen. Eine Möglichkeit besteht darin, auf die Eigenschaft "undefined" zuzugreifen.

Wir mĂŒssen einen Button erstellen, der aufruft console.log c user.email. Nach dieser Aktion sollten wir eine Fehlermeldung erhalten: Uncaught TypeError (konnte Eigenschaft von undefined nicht lesen email) wegen des Fehlens eines Benutzerobjekts. Sie können auch das JavaScript-Ausnahme.

Der gesamte Container sieht so aus:

import React, { Component } from "react";
import { connect } from "react-redux";
import { Input, List, Skeleton, Avatar } from "antd";
import * as Sentry from "@sentry/browser";
import getList from "..\/store\/actions\/getList";

const Search = Input.Search;

const mapState = state =&gt; ({
  list: state.root.list,
  loading: state.root.loading
});

const mapDispatch = {
  getList
};

class Container extends Component {
  constructor(props) {
    super(props);

    Sentry.init({
      dsn: "https:\/\/fc0edcf6927a4397855797a033f04085@sentry.io\/1417586",
    });
  }

  componentDidCatch(error, errorInfo) {
    Sentry.withScope(scope =&gt; {
      Object.keys(errorInfo).forEach(key =&gt; {
        scope.setExtra(key, errorInfo[key]);
      });
      Sentry.captureException(error);
    });
  }
  render() {
    const { list, loading, getList } = this.props;
    const user = undefined;
    return (
      <div classname="App">
        <button
          type="button"
          onclick="{()" > console.log(user.email)}
        &gt;
          Testfehler1
        </button>
        <div onclick="{()" > Sentry.showReportDialog()}&gt;Feedback melden1</div>
        <h1>Musikfinder</h1>
        <br />
        <search onsearch="{value" > getList(value)} Enter-Taste \/&gt;
        {loading &amp;&amp; <skeleton avatar title="{false}" loading="{true}" active />}
        {!loading &amp;&amp; (
          <list
            itemlayout="horizontal"
            datasource="{list}"
            locale="{{" emptytext: <div /> }}
            renderItem={item =&gt; (
              <List.Item>
                &lt;List.Item.Meta
                  avatar={<avatar src="{item.artist.picture}" />}
                  Titel={item.title}
                  Beschreibung={item.artist.name}
                \/&gt;
              </List.Item>
            )}
          />
        )}
      </div>
    );
  }
}

export default connect(
  mapState,
  mapDispatch
)(Container);

Nach der Integration dieser SchaltflÀche sollten Sie sie im Browser testen.

Fehlerverfolgung in der React-Anwendung mit Sentry

Wir haben den ersten Fehler.

Fehlerverfolgung in der React-Anwendung mit Sentry

Whoo-hoo!

Fehlerverfolgung in der React-Anwendung mit Sentry

Wenn Sie auf den Fehlerheader klicken, sehen Sie die Stack-Trace.

Fehlerverfolgung in der React-Anwendung mit Sentry

Die Meldungen sehen schlecht aus. NatĂŒrlich haben wir Fehlermeldungen gesehen, ohne zu verstehen, wo dieser Code ist. StandardmĂ€ĂŸig handelt es sich um die Quellkarte in ReactJS, weil sie nicht konfiguriert ist.

Ich wĂŒrde auch gerne Anweisungen zur Konfiguration der Quellkarte geben, aber das wĂŒrde diesen Artikel viel lĂ€nger machen, als ich geplant hatte.

Sie können dieses Thema erkunden. hier. Wenn Sie an diesem Artikel interessiert sind, Dmitry Nozhenko wird den zweiten Teil ĂŒber die Integration der Quellkarte veröffentlichen. Also, drĂŒcken Sie mehr GefĂ€llt mir und abonnieren Sie Dmitry Nozhenko, um den zweiten Teil nicht zu verpassen.

5. Verwendung Sentry mit Endpunkt API

Okay. Wir haben das JavaScript-Ausnahme in den vorherigen Punkten betrachtet. Was werden wir jedoch mit XHR-Fehlern tun?

Sentry hat auch eine benutzerdefinierte Fehlerverarbeitung. Ich habe es verwendet, um API-Fehler zu verfolgen.

Sentry.captureException(err)

Sie können den Fehlernamen, das Level, die Daten und benutzerdefinierte Daten ĂŒber Ihre Anwendung, E-Mail usw. anpassen.

superagent
  .get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
  .set("X-RapidAPI-Key", #id_key)
  .end((err, response) => {
    if (err) {
      Sentry.configureScope(
        scope => scope
          .setUser({"email": "john.doe@example.com"})
          .setLevel("Error")
      );
      return Sentry.captureException(err);
    }

    if (response) {
      return dispatch(setList(response.body.data));
    }
  });

Ich möchte eine allgemeine Funktion fĂŒr den API-Catch verwenden.

import * as Sentry from "@sentry/browser";

export const apiCatch = (error, getState) => {
  const store = getState();
  const storeStringify = JSON.stringify(store);
  const { root: { user: { email } } } = store;

  Sentry.configureScope(
    scope => scope
      .setLevel("Error")
      .setUser({ email })
      .setExtra("store", storeStringify)
  );
  // Sentry.showReportDialog(); - Wenn Sie Feedback von Nutzern zu einem Fehler erhalten möchten
  return Sentry.captureException(error);
};

Importieren Sie diese Funktion im API-Aufruf.

export default query => (dispatch, getState) => {
  superagent
    .get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
    .set("X-RapidAPI-Key", #id_key)
    .end((error, response) => {
      if (error) {
        return apiCatch(error, getState)
      }

      if (response) {
        return dispatch(setList(response.body.data));
      }
    });
};

Lassen Sie uns die Methoden ĂŒberprĂŒfen:

  • setLevel ermöglicht das EinfĂŒgen eines Fehlerelements in das Sentry-Dashboard. Es hat die Eigenschaften – ‘fatal’, ‘error’, ‘warning’, ‘log’, ‘info’, ‘debug’, ‘critical’.
  • setUser hilft, alle Benutzerdaten (ID, E-Mail-Adresse, Zahlplan usw.) zu speichern.
  • setExtra ermöglicht die Angabe beliebiger benötigter Daten, z. B. des Stores.

Wenn Sie Feedback von Nutzern zu einem Fehler erhalten möchten, sollten Sie die Funktion showReportDialog verwenden.

Sentry.showReportDialog();

Ausgabe:

Heute haben wir eine der Möglichkeiten beschrieben, wie man Sentry in eine React-Anwendung integriert.

→ Telegram-Chat zu Sentry

Quelle: habr.com

60GB SSD 8Gb DDR4