Naar hoofdinhoud gaan
AppSignal probeert zoveel mogelijk Python-excepties te registreren. AppSignal kan excepties in uw hele applicatie vastleggen met onze instrumentaties die onze ondersteuning uitbreiden naar vele populaire frameworks en background job-pakketten. Er kunnen echter scenario’s zijn waarin excepties worden opgeworpen die niet gerelateerd zijn aan potentiële problemen in uw Python-applicatie, zoals bots die automatisch formulieren proberen in te dienen of verouderde links die bezoekers naar inhoud kunnen leiden die niet meer bestaat. Om te voorkomen dat deze fouten als problemen in AppSignal worden gemeld, is het mogelijk om exception handling aan uw code toe te voegen of AppSignal bepaalde fouten volledig te laten negeren.

Fouten negeren

De AppSignal-configuratie maakt het mogelijk om fouten te negeren. Door een lijst met specifieke fouten op te geven, zal AppSignal geen meldingen versturen wanneer deze fouten worden opgeworpen.

Exception handling

Het simpelweg negeren van een fout zal meldingen onderdrukken, maar kan mogelijk een groter probleem verbergen. Om deze reden raden we u aan om exception handling toe te voegen met try ... except-statements in uw applicatie. Met try ... except kunt u specifieke excepties opvangen en een alternatief codepad toevoegen voor wanneer een exceptie optreedt, zoals het renderen van 404-pagina’s of het verstrekken van meer gedetailleerde foutmeldingen aan de gebruiker over wat er mis ging. In een Django view-bestand kunnen we bijvoorbeeld het volgende doen:
def show(request):
   try:
        user = Post.find(1)
    except RecordNotFound:
        return render(request, "not_found.html")
Er zijn een aantal scenario’s, zoals wanneer resources niet bestaan of wanneer een formulierinzending mislukt, die op deze manier moeten worden afgehandeld om correcte HTTP-responses aan de eindgebruiker te bieden. Als u deze opgevangen fouten aan AppSignal wilt rapporteren, gebruikt u de set_error- of send_error-helpers.

set_error

Rapporteer fouten zonder dat ze uw applicatie laten crashen. Met behulp van de set_error-helper wordt de gegeven fout ingesteld op de AppSignal-trace, wat de fout op de trace (request / background job) naar AppSignal rapporteert. Als u de fout nog steeds wilt volgen terwijl u deze opvangt, kunt u de set_error-helper gebruiken om de exceptie toe te voegen aan de huidige AppSignal-trace. De fout wordt vastgelegd in AppSignal, maar uw proces zal niet crashen. In een Django view-bestand kunnen we bijvoorbeeld het volgende doen:
from appsignal import set_error

# In a Django view file
def show(request):
    try:
        user = Post.find(1)
    except Post.DoesNotExist as error:
        set_error(error)
        return render(request, "not_found.html")
De exceptie wordt door AppSignal gevolgd zoals elke andere fout, en het stelt u in staat om aangepaste foutafhandeling en fallbacks te bieden.
Let op: Deze methode werkt alleen wanneer er al een AppSignal-trace actief is. Anders wordt de fout genegeerd. Dit is het geval in de meeste automatisch ondersteunde instrumentaties of bij het gebruik van custom instrumentatie. Zie send_error voor het verzenden van fouten zonder een actieve AppSignal- trace.

send_error

AppSignal biedt een mechanisme om fouten naar AppSignal te verzenden zonder dat er een trace gestart hoeft te worden. Dit is handig voor het volgen van fouten die optreden in code die zich niet in de context van een webrequest of background job bevindt, zoals eenmalige scripts of cron jobs. Dit is nuttig voor apps die onze instrumentaties niet gebruiken voor dit deel van de app waarin de fout wordt opgeworpen. U kunt de send_error-methode gebruiken om vanaf elke plek in uw code direct een exceptie naar AppSignal te verzenden zonder eerst een trace te starten.
from appsignal import send_error

# In a script
def perform():
    try:
        user = Post.find(1)
    except Post.DoesNotExist as error:
        send_error(error)
        print("No post found!")

Aanvullende metadata

Om metadata toe te voegen aan de verzonden fout, gebruikt u de send_error_with_context-methode. Tags en andere typen gegevensaanpassing kunnen op deze manier aan de fout worden toegevoegd.
from appsignal import send_error_with_context, set_params

# In a script
def perform():
    try:
        user = Post.find(1)
    except Post.DoesNotExist as error:
        # Using implicit current span
        with send_error_with_context(error):
            set_params({"abc": "def"})

        # Using explicit `with` block span
        with send_error_with_context(error) as current_span:
            set_params({"abc": "def"}, current_span)

        print("No post found!")