Passer au contenu principal
AppSignal essaie d’enregistrer autant d’exceptions Python que possible. AppSignal est capable de capturer les exceptions dans toute votre application grâce à nos instrumentations, qui étendent notre prise en charge à de nombreux frameworks populaires et packages de jobs en arrière-plan. Cependant, il peut y avoir des scénarios où des exceptions sont levées qui ne sont pas liées à des problèmes potentiels de votre application Python, comme des bots essayant de soumettre automatiquement des formulaires ou des liens obsolètes qui peuvent diriger les visiteurs vers du contenu qui n’existe plus. Pour éviter que ces erreurs ne soient signalées comme des problèmes dans AppSignal, il est possible d’ajouter la gestion des exceptions à votre code ou même de laisser AppSignal ignorer complètement certaines erreurs.

Ignorer les erreurs

La configuration AppSignal permet d’ignorer des erreurs. En fournissant une liste d’erreurs spécifiques, AppSignal n’enverra pas d’alertes lorsque ces erreurs seront levées.

Gestion des exceptions

Le simple fait d’ignorer une erreur fera taire les notifications, mais pourrait potentiellement cacher un problème plus important. Pour cette raison, nous vous recommandons d’ajouter la gestion des exceptions avec des instructions try ... except à votre application. À l’aide de try ... except, vous pouvez capturer des exceptions spécifiques et ajouter un chemin de code alternatif lorsqu’une exception se produit, comme afficher des pages 404 ou fournir à l’utilisateur des messages d’erreur plus détaillés sur ce qui s’est mal passé. Par exemple, dans un fichier de vue Django, nous pouvons faire ce qui suit :
def show(request):
   try:
        user = Post.find(1)
    except RecordNotFound:
        return render(request, "not_found.html")
Il existe plusieurs scénarios, comme lorsque des ressources n’existent pas ou lorsqu’une soumission de formulaire échoue, qui devraient être gérés ainsi pour fournir des réponses HTTP appropriées à l’utilisateur final. Si vous souhaitez signaler ces erreurs capturées à AppSignal, utilisez les helpers set_error ou send_error.

set_error

Signalez des erreurs sans qu’elles ne fassent planter votre application. À l’aide du helper set_error, l’erreur donnée est définie sur la trace AppSignal, ce qui signale l’erreur sur la trace (requête / job en arrière-plan) à AppSignal. Si vous souhaitez tout de même suivre l’erreur tout en la capturant, vous pouvez utiliser le helper set_error pour ajouter l’exception à la trace AppSignal actuelle. L’erreur sera enregistrée dans AppSignal, mais votre processus ne plantera pas. Par exemple, dans un fichier de vue Django, nous pouvons faire ce qui suit :
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")
L’exception sera suivie par AppSignal comme n’importe quelle autre erreur, et cela vous permet de fournir une gestion d’erreur personnalisée et des solutions de repli.
Note : Cette méthode ne fonctionne que lorsqu’une trace AppSignal est déjà active. Sinon, l’erreur sera ignorée. C’est le cas dans la plupart des instrumentations automatiquement prises en charge ou lors de l’utilisation de l’instrumentation personnalisée. Veuillez consulter send_error pour envoyer des erreurs sans trace AppSignal active.

send_error

AppSignal fournit un mécanisme pour envoyer des erreurs à AppSignal sans avoir à démarrer une trace. Ceci est utile pour suivre les erreurs qui se produisent dans du code qui ne se trouve pas dans le contexte d’une requête web ou d’un job en arrière-plan, comme des scripts ponctuels ou des cron jobs. Ceci est utile pour les applications qui n’utilisent pas nos instrumentations pour la partie de l’application dans laquelle l’erreur est levée. Vous pouvez utiliser la méthode send_error pour envoyer directement une exception à AppSignal depuis n’importe quel endroit de votre code sans démarrer de trace au préalable.
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!")

Métadonnées supplémentaires

Pour ajouter des métadonnées à l’erreur envoyée, utilisez la méthode send_error_with_context. Des tags et d’autres types de personnalisation des données peuvent être ajoutés à l’erreur de cette façon.
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!")