Error tracking in React applications using Sentry

Error tracking in React applications using Sentry

TĂ€na rÀÀgin teile veaparanduse jĂ€lgimisest reaalajas Reacti rakenduses. Kasutajaliidese rakendust tavaliselt ei kasutata veaprobleemide jĂ€lgimiseks. Paljud ettevĂ”tted lĂŒkkavad veaparanduse jĂ€lgimise pigem edasi, kuni nad jĂ”uavad dokumentatsiooni, testimise ja muu juurde. Kuid kui saate oma toodet paremaks muuta, siis tehke seda kindlasti!

1. Miks vajate Sentryd?

Oletan, et olete huvitatud veaparanduse jÀlgimisest tootmisprotsessi kÀigus.

Kas arvate, et seda on liiga vÀhe?

HĂ€sti, vaatame ĂŒksikasju.

Peamised pÔhjused Sentry kasutamiseks arendajatele:

  • VĂ€hendab riske, kui juurutatakse vigadega koodi.
  • Aitab QA-l koodi testida.
  • Saada kiireid teateid probleemidest.
  • VĂ”imalus kiiresti vigu parandada.
  • Lihtne vigade kuvamine haldashjĂ€lgimisliideses.
  • Vigade sorteerimine kasutaja/brauseri segmentide kaupa.

Peamised pÔhjused CEO/Projektijuhi jaoks.

  • Rahaliste sÀÀstude saavutamine (Sentry saab paigaldada teie serveritesse).
  • Kasutajate tagasiside kogumine.
  • Reaalajas mĂ”istmine, mis teie projektiga valesti on.
  • Arusaamine probleemide arvust, millega inimesed teie rakenduses kokku puutuvad
  • Aitamine leida kohti, kus teie arendajad eksisid

Ma arvan, et arendajad oleksid sellest artiklist esmajÀrjekorras huvitatud. Samuti vÔite seda pÔhjuseid kasutada, et veenda juhtkonda Sentry integreerimisel.

Olge viimase punkti suhtes ettevaatlik, kui tegemist on Àriga.

Kas olete juba huvitatud?

Error tracking in React applications using Sentry

Mis on Sentry?

Sentry on avatud lĂ€htekoodiga veateavitusrakendus, mis aitab arendajatel jĂ€lgida ja reaalajas parandada kokkuvarisemisi. Ärge unustage, et rakendus aitab suurendada tĂ”husust ja parandada kasutaja kasutamist. Sentry toetab JavaScripti, Node'i, Pythonit, PHP-d, Ruby't, Java't ja muid programmeerimiskeeli.

Error tracking in React applications using Sentry

2. Logige sisse ja looge projekt

  • Avage oma Sentry konto. VĂ”ib-olla peate sisse logima. (Pange tĂ€hele, et Sentryt saab installida teie serveritesse)
  • JĂ€rgmine samm on projekti loomine
  • Valige oma keel nimekirjast. (Me kavatseme valida Reacti. KlĂ”psake "Loo projekt")

Error tracking in React applications using Sentry

Seadistage oma rakendus. Allpool on vÀlja toodud pÔhijuhend, kuidas integreerida Sentry konteinerisse:

import * as Sentry from '@sentry/browser';
// Sentry.init({
//  dsn: "<https:>"
// });
// peaks pidi oleks kutsutud enne, kui seda siin kasutama asute
// ideaalne oleks isegi enne teie React rakenduse renderdamist

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) {
            //render fallback UI
            return (
              <a onclick="{()" > Sentry.showReportDialog()}&gt;Raporteeri tagasisidet</a>
            );
        } else {
            //kui viga pole, renderda lapsed muutmata
            return this.props.children;
        }
    }
}

Sentry-l on kasulik Meistri juhend, mis aitab teil mÔista, mida jÀrgmine teha. Saate jÀrgneda jÀrgmistele sammudele. Soovin nÀidata, kuidas luua esimest veateadet. SuurepÀrane, oleme projekti loonud! Liigume jÀrgmise sammu juurde.

3. Reacti ja Sentry integreerimine

Peate installima npm paketi oma projekti.

npm i @sentry/browser

Initsialiseerige Sentry oma konteineris:

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

DSN leiate Projects -> Settings -> Client Keys. Saate kliendi vÔtmed otsinguribalt.

Error tracking in React applications using Sentry

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

4. Esimese vea jÀlgimine

NĂ€iteks kasutasin lihtsat muusika rakendust, mis kasutab Deezeri API-t. Saate seda nĂ€ha siit. Peame looma vea. Üks viis selleks on pöörduda "undefined" omaduse poole.

Me peame looma nupu, mis kutsub esile console.log koos user.email. PÀrast seda toimingut peaksime saama veateate: Uncaught TypeError (ei saa lugeda omadust undefined'ist) email) kasutaja objekti puudumise tÔttu. Samuti saate kasutada JavaScripti erandit.

Kogu konteiner nÀeb vÀlja jÀrgmine:

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;
          test error1
        </button>
        <div onclick="{()" > Sentry.showReportDialog()}&gt;Report feedback1</div>
        <h1>Muusika Otsija</h1>
        <br />
        <search onsearch="{value" > getList(value)} enterButton /&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}" />}
                  title={item.title}
                  description={item.artist.name}
                /&gt;
              </List.Item>
            )}
          />
        )}
      </div>
    );
  }
}

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

PĂ€rast selle nupu integreerimist peate seda testima brauseris.

Error tracking in React applications using Sentry

Meil on esimene viga

Error tracking in React applications using Sentry

VĂ€ga hea!

Error tracking in React applications using Sentry

Kui klÔpsate pealkirja veal, nÀete virna jÀlgimist.

Error tracking in React applications using Sentry

Teated nÀevad halvad vÀlja. Loomulikult oleme nÀinud veateateid, ilma et oleksime teadnud, kus see kood asub. Vaikimisi rÀÀgime ReactJS-i allikakaardist, kuna need ei ole seadistatud.

Sooviksin samuti anda juhiseid allikakaardi seadistamiseks, kuid see teeks selle artikli palju pikemaks, kui kavandasin.

Saate seda teemat uurida siit. Kui see artikkel teid huvitab, Dmitry Nozhenko avaldab teise osa allikakaardi integreerimisest. Nii et vajutage rohkem nagu ja tellige Dmitry Nozhenko, et mitte jÀÀda ilma teisest osast.

5. Kasutamine Sentry lÔpp-punkti API

Okei. Oleme eelnevates punktides vaadanud JavaScripti erandeid. Kuid mida me teeme XHR vigadega?

Sentryl on ka kohandatud veahaldus. Olen kasutanud seda API vigade jÀlgimiseks.

Sentry.captureException(err)

Saate oma rakenduse, e-posti jne kaudu seadistada vea nime, taseme, lisada andmeid ja unikaalseid kasutajaandmeid.

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));
    }
  });

Soovin kasutada API catch jaoks ĂŒhist funktsiooni.

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(); - Kui soovite kasutajate tagasisidet veast
  return Sentry.captureException(error);
};

Importige see funktsioon API kutses.

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));
      }
    });
};

Kontrollime meetodeid:

  • setLevel vĂ”imaldab sisestada veateate taseme Sentry juhtpaneelile. Sellel on omadused — ‘fataalne’, ‘vead’, ‘hoiatus’, ‘logi’, ‘info’, ‘debug’, ‘kriitiline’.
  • setUser aitab salvestada mingeid kasutajaandmeid (id, e-posti aadress, makseplaan jne).
  • setExtra vĂ”imaldab mÀÀrata mistahes andmeid, mida vajate, nĂ€iteks pood.

Kui soovite saada kasutaja tagasisidet vea kohta, peaksite kasutama funktsiooni showReportDialog.

Sentry.showReportDialog();

VĂ€ljund:

TĂ€na kirjeldasime ĂŒhte viisi, kuidas integreerida Sentry React rakendusse.

→ Telegrami vestlus Sentry

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster