Sobes.tech
Middle+

Jak przechwytujesz globalne błędy po stronie serwera?

sobes.tech AI

Odpowiedź od AI

Istnieje kilka powszechnych podejść do przechwytywania globalnych błędów po stronie serwera:

  • Użycie wbudowanych mechanizmów frameworków/platform: Większość frameworków po stronie serwera (Node.js z Express, Python z Django/Flask, Ruby z Rails itp.) zapewnia wbudowanych obsługiwaczy błędów.

    // Przykład dla Express.js
    app.use((err, req, res, next) => {
      console.error(err.stack); // Logowanie błędu
      res.status(500).send('Coś poszło nie tak!'); // Odpowiedź do klienta
    });
    
    # Przykład dla Flask
    @app.errorhandler(500)
    def internal_server_error(e):
        return "Coś poszło nie tak!", 500
    
  • Przechwytywanie nieobsłużonych wyjątków: W środowiskach wykonawczych, takich jak Node.js, można subskrybować zdarzenia globalne, takie jak unhandledRejection i uncaughtException, aby łapać błędy, które w przeciwnym razie spowodowałyby awarię procesu.

    // Przykład dla Node.js
    process.on('uncaughtException', (err) => {
      console.error('Nieobsłużony wyjątek:', err);
      // Tutaj można wykonać działania, takie jak wysłanie powiadomienia lub poprawne zamknięcie
      process.exit(1); // Zakończenie z błędem
    });
    
    process.on('unhandledRejection', (reason, promise) => {
      console.error('Nieobsłużone odrzucenie obietnicy:', reason);
      // Tutaj można wykonać działania, takie jak logowanie lub wysłanie powiadomienia
    });
    
  • Zcentralizowane logowanie: Wysyłanie szczegółowych informacji o błędach do zcentralizowanego systemu logowania (np. ELK Stack, Sentry, Datadog) w celu analizy, powiadomień i monitorowania.

  • Użycie middleware (dla frameworków webowych): Tworzenie middleware, które opakowuje obsługę żądań i przechwytuje błędy wewnętrzne.

  • Wykorzystanie narzędzi monitorujących: Użycie narzędzi monitorowania wydajności aplikacji (APM) takich jak New Relic, Dynatrace czy AppDynamics, które automatycznie przechwytują i agregują informacje o błędach.