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
unhandledRejectioniuncaughtException, 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.