> ## 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

Im Lebenszyklus eines `Span` bieten wir mehrere Möglichkeiten, dessen internen Zustand zu aktualisieren oder zu ändern. Hooks sind der Mechanismus dafür. Mithilfe speziell geformter Funktionen können wir jeden ausgehenden `Span` mit zusätzlichen Informationen anreichern, bevor er an die Push-API gesendet wird.

Beide Arten von Hooks bestehen aus einem Array von zusammengesetzten Funktionen, die von rechts nach links angewendet werden. Mit anderen Worten: Die zuletzt hinzugefügten Hooks werden immer zuerst angewendet.

Wenn ein `Span` an `appsignal.send()` übergeben wird oder ein `Error` an `appsignal.sendError()`, werden Hooks in der folgenden Reihenfolge auf den `Span` angewendet:

* Decorators
* Optionale `tags`- oder `namespace`-Argumente an `appsignal.send()`
* Overrides

Hooks werden in der Regel in einem Plugin angewendet.

<Tip>
  Wenn ein `Error` an `appsignal.sendError()` übergeben wird, wird intern ein
  `Span`-Objekt erstellt, sodass Hooks weiterhin wie üblich darauf angewendet werden können.
</Tip>

## Decorators

Es kann notwendig sein, einem `Span` auf globaler Ebene zusätzlichen Kontext hinzuzufügen, sodass alle Anfragen diese Information standardmäßig enthalten. Dafür können Decorators verwendet werden.

## Overrides

Overrides sind die letzte Möglichkeit, Daten in einem `Span` zu aktualisieren, bevor er an die Push-API gesendet wird. Sie könnten beispielsweise wählen, alle Benutzerdaten in einem Override aus `Span`s zu entfernen.

## Eigene Hooks schreiben

Hooks sind im Wesentlichen Funktionen, die einen `Span` als einziges Argument nehmen und denselben `Span` zurückgeben. Während der Ausführung der Funktion können Änderungen am `Span` vorgenommen werden, wir empfehlen jedoch, keine weiteren Nebenwirkungen einzuführen.

Hier ist ein Beispiel, wie Sie einen Hook zum `Appsignal`-Objekt hinzufügen können:

<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>

Auch Plugins können Decorators und Overrides hinzufügen. Wenn Sie einen wiederverwendbaren Hook erstellen möchten, der beispielsweise in einem `npm`-Modul verpackt werden kann, empfehlen wir, [die Plugin-Schnittstelle](/front-end/plugins/) zu nutzen, um ihn zu registrieren.
