Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

Sot do t'ju tregoj për ndjekjen e gabimeve në kohë reale në aplikacionin React. Aplikacioni i ndërfaqes së jashtme zakonisht nuk përdoret për ndjekjen e gabimeve. Disa kompani shpesh e shtyjnë ndjekjen e gabimeve, duke u kthyer tek ajo pas dokumentacionit, testeve dhe kështu me radhë. Megjithatë, nëse mund të përmirësoni produktin tuaj, thjesht bëni këtë!

1. Pse ju nevojitet Sentry?

Supozoni se jeni të interesuar për ndjekjen e gabimeve në procesin e prodhimit

Mendoni se është e pamjaftueshme?

Mirë, le të shohim detajet.

Arsyet kryesore për përdorimin e Sentry nga zhvilluesit:

  • Lejon tĂ« eliminoni rreziqet gjatĂ« shpĂ«rndarjes sĂ« kodit me gabime
  • Ndihma e QA nĂ« testimin e kodit
  • Marrja e njoftimeve tĂ« shpejta pĂ«r problemet
  • MundĂ«sia pĂ«r korrigjimin e shpejtĂ« tĂ« gabimeve
  • Marrja e njĂ« pamjeje tĂ« QartĂ« tĂ« gabimeve nĂ« panelin e administratorit
  • Kategorizimi i gabimeve sipas segmenteve tĂ« pĂ«rdoruesve / shfletuesit

Arsyet kryesore për CEO / Drejtuesin e projektit

  • Kursimi i parave (Sentry mund tĂ« instalohet nĂ« serverĂ«t tuaj)
  • Marrja e feedback-ut nga pĂ«rdoruesit
  • TĂ« kuptuarit e asaj qĂ« nuk shkon me projektin tuaj nĂ« kohĂ« reale
  • Kuptimi i numrit tĂ« problemeve qĂ« paraqesin njerĂ«zit me aplikacionin tuaj
  • Ndihma pĂ«r tĂ« gjetur vendet ku zhvilluesit tuaj patĂ«n lĂ«shime

Mendoj se zhvilluesit do të ishin të interesuar për këtë artikull në radhë të parë. Ju gjithashtu mund të përdorni këtë listë arsyesh për të bindur menaxhmentin të integrojë Sentry.

Bëni kujdes me pikën e fundit në listë për biznesin.

A jeni tani të interesuar?

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

ÇfarĂ« Ă«shtĂ« Sentry?

Sentry është një aplikacion për ndjekjen e gabimeve me burim të hapur, i cili ndihmon zhvilluesit të ndjekin, të rregullojnë dështimet në kohë reale. Mos harroni gjithashtu se aplikacioni ndihmon në rritjen e efikasitetit dhe përmirësimin e përdorimit nga përdoruesit. Sentry mbështet JavaScript, Node, Python, PHP, Ruby, Java dhe gjuhë të tjera programimi.

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

2. Hyni dhe krijoni një projekt

  • Hapni llogarinĂ« tuaj nĂ« Sentry. Ndoshta duhet tĂ« hyni nĂ« sistem. (VĂ«rej se Sentry mund tĂ« instalohet nĂ« serverĂ«t tuaj)
  • Hapi tjetĂ«r Ă«shtĂ« krijimi i njĂ« projekti
  • Zgjidhni gjuhĂ«n tuaj nga lista. (Ne po planifikojmĂ« tĂ« zgjedhim React. Klikoni "Krijo projekt")

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

Konfiguroni aplikacionin tuaj. Një shembull bazë se si të integrohet Sentry në një kontejner mund ta shihni më poshtë:

import * as Sentry from '@sentry/browser';
// Sentry.init({
//  dsn: "<https:>"
// });
// duhet të ishte thirrur para se ta përdorni këtu
// idealisht para se të renderizoni aplikacionin tuaj reagues 

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;Raporto feedback</a>
            );
        } else {
            //kur nuk ka ndonjë gabim, renderizoni fëmijët pa ndryshime
            return this.props.children;
        }
    }
}

Në Sentry ka një Mjeshtër të dobishëm që do t'ju ndihmojë të kuptoni se çfarë duhet të bëni më pas. Mund të ndiqni këto hapa. Dua t'ju tregoj si të krijoni trajtuesin e parë të gabimeve. Shkëlqyeshëm, krijuam projektin! Kalojmë në hapin tjetër.

3. Integrimi i React dhe Sentry

Duhet të instaloni paketën npm në projektin tuaj.

npm i @sentry/browser

Inicializoni Sentry në kontejnerin tuaj:

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

DSN ndodhet në Projects -> Settings -> Client Keys. Mund ta gjeni çelësin e klientit në linjën e kërkimit.

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

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

4. Ndjekja e gabimit të parë

Për shembull, kam përdorur një aplikacion muzikor të thjeshtë me API Deezer. Mund ta shihni këtë. këtu. Na nevojitet të krijojmë një gabim. Një nga mënyrat është të referohemi në pronën "undefined".

Duhet të krijojmë një buton që thërret console.log me user.email. Pas këtij veprimi, duhet të marrim një mesazh gabimi: Uncaught TypeError (nuk mund të lexoj pronën nga undefined) email) për shkak të mungesës së objektit të përdoruesit. Mund ta përdorni gjithashtu përjashtimin Javascript.

I gjithë kontenieri duket kështu:

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>Music Finder</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);

Pas integrimit të këtij butoni, duhet ta testoni atë në shfletues.

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

Kemi një gabim të parë

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

Bravo!

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

Nëse klikoni në gabimin e titullit, do të shihni gjurmën e stack-ut.

Ndjekja e gabimeve në aplikacionin React me ndihmën e Sentry

Mesazhet duken keq. Sigurisht, kemi parë mesazhe gabimi të paqarta, pa kuptuar se ku ndodhet ky kod. Në mënyrë të parazgjedhur, kjo është për hartën e burimeve në ReactJS, sepse ato nuk janë të konfigurueshme.

Do të doja gjithashtu të ofroja udhëzime për konfigurimin e hartës së burimeve, por kjo do e bënte këtë artikull shumë më të gjatë se sa kisha planifikuar.

Mund të eksploroni këtë temë këtu. Nëse jeni të interesuar në këtë artikull, Dmitry Nozhenko do të publikojë pjesën e dytë mbi integrimin e hartës së burimeve. Pra, bëni më shumë like dhe regjistrohuni në Dmitry Nozhenko, që të mos humbisni pjesën e dytë.

5. Përdorimi Sentry me pikën e fundit API

Ok. E kemi shqyrtuar përjashtimin e javascript në pikat e mëparshme. Megjithatë, çfarë do të bëjmë me gabimet XHR?

Sentry gjithashtu ka përpunim të personalizuar të gabimeve. E kam përdorur për të ndjekur gabimet e API.

Sentry.captureException(err)

Mund të konfiguroni emrin e gabimit, nivelin, të shtoni të dhëna, të dhëna unike për përdoruesin me aplikacionin tuaj, emailin etj.

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

Do doja të përdor një funksion të zakonshëm për kapjen e API.

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(); - Nëse dëshiron të marrësh reagimin e përdoruesve mbi gabimin
  return Sentry.captureException(error);
};

Importoni këtë funksion në thirrjen e API.

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

Le të kontrollojmë metodat:

  • setLevel lejon njĂ« mesazh gabimi nĂ« panelin e monitorimit Sentry. Ajo ka pronĂ«si — 'fatal', 'error', 'warning', 'log', 'info', 'debug', 'critical'.
  • setUser ndihmon nĂ« ruajtjen e çdo tĂ« dhĂ«ne pĂ«rdoruesi (id, adresĂ« emaili, plan pagese, etj.).
  • setExtra lejon tĂ« caktosh çdo tĂ« dhĂ«nĂ« qĂ« tĂ« nevojitet, si p.sh. dyqani.

Nëse dëshiron të marrësh komente nga përdoruesit për gabimin, duhet të përdorësh funksionin showReportDialog.

Sentry.showReportDialog();

Dalja:

Sot kemi përshkruar një nga mënyrat për të integruar Sentry në një aplikacion React.

→ Biseda nĂ« Telegram pĂ«r Sentry

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster