Sobes.tech
Middle

Kako pratiš i nadgledaš greške u JavaScript-u?

sobes.tech АИ

Одговор од АИ

Greške u JavaScript-u pratim i nadgledam sledećim metodama:

  • Konzola pregledača: Glavni alat za otklanjanje grešaka tokom razvoja. Poruke o greškama (syntetičke, logičke, runtime) se prikazuju sa navedenom datotekom i redom.

  • try...catch blokovi: Hvataju greške tokom izvršavanja, omogućavaju njihovo obrađivanje ili prikaz dodatnih informacija.

    try {
      // Kod koji može izazvati grešku
      let result = riskyOperation();
    } catch (error) {
      // Obrada greške
      console.error("Došlo je do greške:", error.message);
      // Može se poslati greška na server
      sendErrorToServer(error);
    }
    
  • window.onerror: Globalni handler za neobrađene JavaScript greške. Omogućava centralizovano hvatanje grešaka koje "prođu" pored try...catch.

    window.onerror = function(message, source, lineno, colno, error) {
      console.error("Globalna greška:", message, source, lineno, colno);
      // Slanje informacija o grešci na server
      sendErrorToServer({
        message: message,
        source: source,
        lineno: lineno,
        colno: colno,
        stack: error ? error.stack : 'N/A'
      });
      return true; // Vraća true da bi se suppress-ovalo standardno prikazivanje greške u konzoli
    };
    
  • Događaj unhandledrejection za Promises: Hvata neobrađene greške u promisima.

    window.addEventListener('unhandledrejection', function(event) {
      console.error('Neobrađeno odbacivanje Promise-a:', event.reason);
      // Slanje informacija o grešci na server
      sendErrorToServer(event.reason);
    });
    
  • Sistemi za nadgledanje grešaka (Sentry, Bugsnag, Rollbar): Profesionalne usluge koje prikupljaju, agregiraju i analiziraju greške u realnom vremenu. Obuhvataju staktrejse, informacije o okruženju korisnika, učestalost grešaka i obaveštenja. Glavni su alat u produkciji.

  • Logovanje na serveru: Greške koje se hvataju na frontendu pomoću try...catch, onerror ili unhandledrejection, šalju se na server radi centralnog čuvanja i analize.

Izbor metode zavisi od faze razvoja i kritičnosti greške. U produkciji uvek koristim kombinaciju try...catch, globalnih handlera i sistema za nadgledanje.