> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Hooks

Dans le cycle de vie d'un `Span`, nous fournissons plusieurs occasions de mettre à jour ou modifier son état interne. Les hooks sont le mécanisme prévu à cet effet. À l'aide de fonctions ayant une forme spécifique, nous pouvons enrichir tout `Span` sortant avec des informations supplémentaires avant qu'il soit envoyé à l'API Push.

Les deux types de hooks sont un tableau de fonctions composées qui sont appliquées de droite à gauche. Autrement dit, les hooks ajoutés en dernier sont toujours les premiers à être appliqués.

Lorsqu'un `Span` est passé à `appsignal.send()`, ou qu'une `Error` est passée à `appsignal.sendError()`, les hooks sont appliqués au `Span` dans l'ordre suivant :

* Décorateurs
* Arguments optionnels `tags` ou `namespace` de `appsignal.send()`
* Surcharges

Les hooks sont généralement appliqués dans un plugin.

<Tip>
  Lorsqu'une `Error` est passée à `appsignal.sendError()`, un objet `Span`
  interne est créé, ce qui signifie que les Hooks peuvent toujours lui être appliqués normalement.
</Tip>

## Décorateurs

Il peut être nécessaire d'ajouter du contexte supplémentaire à un `Span` au niveau global, afin que toutes les requêtes incluent par défaut ces informations. Les décorateurs peuvent être utilisés pour cela.

## Surcharges

Les surcharges sont la dernière opportunité possible de mettre à jour les données dans un `Span` avant qu'il soit envoyé à l'API Push. Par exemple, vous pouvez choisir de nettoyer toutes les données utilisateur des `Span`s dans une surcharge.

## Écrire votre propre Hook

Les hooks sont, essentiellement, des fonctions qui prennent un `Span` comme unique argument, puis renvoient le même `Span`. Pendant l'exécution de la fonction, des modifications peuvent être apportées au `Span`, mais nous suggérons de n'introduire aucun autre effet de bord.

Voici un exemple de la façon dont vous pouvez ajouter un Hook à l'objet `Appsignal` :

<CodeGroup>
  ```js JavaScript theme={null}
  appsignal.addDecorator((span) => {
    return span.setTags({ customTag: "value" });
  });

  appsignal.addOverride((span) => {
    // scrub e-mail addresses
    const { tags } = span.serialize();

    return span.setTags({
      text: tags.text.replace(/^[^\s@]+@[^\s@]+\.[^\s@]+$/, "[SCRUBBED]"),
    });
  });
  ```
</CodeGroup>

Les plugins peuvent également ajouter des décorateurs et des surcharges. Si vous cherchez à créer un hook réutilisable, qui peut être empaqueté dans un module `npm`, par exemple, nous vous recommandons d'utiliser [l'interface de plugin](/front-end/plugins/) pour l'enregistrer.
