Errors negeren
De AppSignal-configuratie maakt het mogelijk om errors te negeren. Door een lijst met specifieke errors op te geven, stuurt AppSignal geen alerts wanneer deze errors worden geworpen.Exception handling
Een error simpelweg negeren onderdrukt meldingen, maar kan mogelijk een groter probleem verbergen. Daarom raden we u aan exception handling toe te voegen metbegin .. rescue-blokken aan uw applicatie.
Met begin .. rescue kunt u specifieke exceptions opvangen en een
alternatief codepad toevoegen voor wanneer een exception optreedt, zoals het renderen van 404-pagina’s
of het de gebruiker geven van meer gedetailleerde foutmeldingen over wat er mis is gegaan.
Rails rescue_from
Rails biedt een mechanisme om exceptions op controllerniveau af te handelen. Door eenrescue_from-statement te definiëren voor een specifieke error is het mogelijk om een
alternatief codepad aan te maken voor wanneer die exception wordt geworpen. Omdat dit
op elk controllerniveau gedefinieerd kan worden, is het mogelijk om exception handling
op applicatieniveau toe te voegen.
rescue_from is te vinden in de Rails-gids over
ActionController.
404’s afhandelen
Als een bezoeker een URL bezoekt die niet door uw routing of controller kan worden afgehandeld, gooien Rack en andere frameworks een exception. Het is meestal een goed idee om deze exceptions af te handelen met een 404-response voor uw gebruikers. In controllers waar eenfind-operatie wordt uitgevoerd op basis van een parameter uit
een URL, wordt aanbevolen om ActiveRecord::RecordNotFound af te handelen (of het
equivalent in uw ORM van keuze) om ook een 404-response te tonen. Dit kan echter
echte bugs verbergen, dus dit moet met zorg gebeuren.
Ongeldige authenticity tokens afhandelen
Rails heeft een mechanisme dat uw formulieren beschermt tegen het te gemakkelijk worden ingevuld door bots. Telkens wanneer een formulier wordt gepost zonder een correcte authenticity token, wordt eenActionController::InvalidAuthenticityToken geworpen.
Soms kunnen legitieme gebruikers ook tegen deze errors aanlopen, dus is het een goed
idee om een aparte foutpagina te hebben die uitlegt wat er mis is gegaan. We adviseren om
deze pagina terug te geven met een 422 (Unprocessable Entity) response.
Hackpogingen afhandelen
U kunt errors krijgen omdat bots of hackers proberen beveiligingsproblemen uit te buiten, zoals de beruchte YAML-exploit. Nieuwere versies van Rails gooien eenHash::DisallowedType wanneer dit gebeurt. Een RangeError is ook vaak een resultaat
van een hackpoging. U kunt deze soorten errors rescue’en en een 403
(Forbidden) response retourneren.
Helpermethoden voor exception-reporting
AppSignal biedt één interface om exceptions te rapporteren metAppsignal.report_error.
Als uw applicatie Ruby gem versie 3 of ouder gebruikt, zie de legacy exception handling-sectie.
Appsignal.report_error
Applicaties kunnen exception handling hebben waarbij ze het Ruby-proces niet willen laten crashen. Door exception handling toe te voegen, borrelt de exception niet meer omhoog naar de AppSignal-instrumentation. AppSignal rapporteert deze exceptions niet. Als u de exception wilt rapporteren zonder dat de applicatie crasht, gebruik dan deAppsignal.report_error-helper om deze vanuit de exception handling aan AppSignal te rapporteren.
Als er een AppSignal-transactie actief is, voegt deze helper de exception toe aan de huidige transactie. Applicaties kunnen meerdere exceptions rapporteren op één transactie.
Als er geen transactie actief is, maakt deze helper een nieuwe transactie aan en rapporteert de exception op de nieuw aangemaakte transactie. AppSignal rapporteert de exception altijd op deze manier wanneer Appsignal.report_error wordt gebruikt.
Metadata toevoegen
Het aanpassen van de metadata op de transactie voor de exception is mogelijk door een block door te geven aan deAppsignal.report_error-helper. Zie onze gidsen over Tagging en Data Customization voor meer informatie over welk soort data in dit block kan worden toegevoegd.
De metadata die in het block van Appsignal.report_error wordt ingesteld, is alleen van toepassing op de exception die aan de helper is gegeven. Metadata die buiten de Appsignal.report_error-blocks wordt ingesteld, wordt toegevoegd aan alle exceptions als er een actieve transactie is.
Meerdere exceptions rapporteren
Meerdere errors kunnen in één transactie worden gerapporteerd, zoals een Rails-controller-actie die een HTTP-request afhandelt of een Sidekiq background job. Er kunnen maximaal 10 errors op één transactie worden ingesteld. Als er meerdere exceptions in één transactie worden gerapporteerd, is de metadata die in het block vanAppsignal.report_error wordt ingesteld alleen van toepassing op de exception die aan de helper is gegeven. Metadata die buiten de Appsignal.report_error-blocks wordt ingesteld, wordt aan alle exceptions toegevoegd.
Exceptions rapporteren die een proces laten crashen
Standaard rapporteert AppSignal exceptions die een Ruby-proces laten crashen, zolang AppSignal is gestart voordat de exception zich voordoet.enable_at_exit_reporter config-optie op false.
Kortlevende Ruby-processen
Bij het rapporteren van exceptions vanuit Ruby-scripts, Rake-taken of kortlevende Ruby-processen, lees de documentatie op die pagina’s over wanneer u het besteAppsignal.stop kunt aanroepen om ervoor te zorgen dat alle exceptions naar AppSignal worden gerapporteerd.
Legacy exception handling
Lees deze sectie als u AppSignal voor Ruby gem versie 3 of ouder gebruikt. Voor nieuwere versies van onze Ruby gem, gebruik deAppsignal.report_error helper.
AppSignal biedt twee helpermethoden voor exception-reporting; welke u gebruikt, hangt af van de context van de error. De methoden zijn:
set_error: Deset_error-helper stelt de error in op de momenteel actieve transactie. Als er geen transactie actief is, wordt er geen error gerapporteerd. Het instellen van een error op de momenteel actieve transactie overschrijft elke error die eerder op de transactie is ingesteld.send_error: Gebruiksend_errorom errors te rapporteren wanneer er geen AppSignal-transactie actief is.
Appsignal.set_error
Er zijn scenario’s waarin u uw eigen exception handling heeft en niet wilt dat het Ruby-proces crasht. Door uw eigen exception handling toe te voegen, borrelt de error niet meer omhoog naar de AppSignal-integratie en wordt deze dus niet automatisch geregistreerd. Als u de error toch wilt tracken, kunt uAppsignal.set_error gebruiken om de exception toe te voegen aan de huidige AppSignal-transactie. De error wordt in AppSignal geregistreerd, maar uw proces crasht niet.
set_error aanroepen werkt alleen wanneer er een AppSignal-transactie actief is. Anders wordt de error genegeerd. Een transactie is actief in de meeste van onze automatisch ondersteunde integraties en wanneer Appsignal.monitor of Appsignal.monitor_transaction wordt gebruikt. Voor meer informatie over wanneer u Appsignal.monitor_transaction moet gebruiken, raadpleegt u onze gids over instrumentation voor scripts en background jobs.
Zie Appsignal.send_error voor het versturen van errors zonder een AppSignal-transactie.
Appsignal.send_error
AppSignal biedt een mechanisme om errors naar AppSignal te sturen zonder dat er een transactie hoeft te worden gestart. Dit is nuttig om errors te tracken die voorkomen in code die niet in een web- of background-job-context staat, zoals afzonderlijke Rake-taken of Ruby-scripts. Dit is nuttig voor instrumentation die niet automatisch AppSignal-transacties aanmaakt om te profileren, zoals onze integraties. U kunt de methodeAppsignal.send_error gebruiken om een exception rechtstreeks naar AppSignal te sturen vanaf elke plek in uw code zonder eerst een AppSignal-transactie met Appsignal.monitor te starten.
Metadata toevoegen
In AppSignal voor Ruby gem 2.9 en nieuwer kan een extra block worden doorgegeven aan de methodeAppsignal.send_error om meer metadata aan de error-transactie toe te voegen. Dit omvat metadata zoals de actienaam en parameters. Oudere versies van de Ruby gem staan niet toe dat er aanvullende metadata wordt ingesteld.
Appsignal.listen_for_error
Een alternatieve manier om errors met AppSignal te tracken is door code die mogelijk een exception werpt te omwikkelen in eenlisten_for_error-block. Als binnen dat block een
exception wordt geworpen, wordt deze automatisch door AppSignal getrackt en opnieuw geworpen. Hierdoor
kunnen de applicatie en frameworks de exception als normaal afhandelen.