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

# Ausnahmebehandlung

In den meisten Anwendungen werden einige Fehler ausgelöst, die nicht mit möglichen
Bugs in Ihrem Code zusammenhängen, sondern einfach passieren, wenn Ihre App mit der
realen Welt in Kontakt kommt. Bots können vorbeischauen und versuchen, automatisch
Formulare zu senden, veraltete Links können Besucher zu nicht mehr existierenden Inhalten
führen und so weiter.

Um zu verhindern, dass diese Fehler in AppSignal als Probleme ausgegeben werden, ist es möglich,
Ihrem Code Ausnahmebehandlung hinzuzufügen oder AppSignal sogar bestimmte Fehler vollständig
ignorieren zu lassen.

## Fehler ignorieren

Die AppSignal-Konfiguration ermöglicht es, [Fehler zu
ignorieren](/guides/filter-data/ignore-errors). Indem Sie eine Liste
spezifischer Fehler bereitstellen, sendet AppSignal keine Warnungen, wenn diese Fehler ausgelöst werden.

## Appsignal.set\_error/3

Wenn Sie Ausnahmen in Ihrer Anwendung abfangen möchten, um Abstürze zu verhindern, aber
das Auftreten dennoch verfolgen möchten, können Sie
[`Appsignal.set_error/2`][hexdocs-set_error-2] verwenden, um die Ausnahme zur
aktuellen AppSignal-Transaktion hinzuzufügen:

<CodeGroup>
  ```elixir Elixir theme={null}
  try do
    raise "Exception!"
  rescue
    exception -> Appsignal.set_error(exception, __STACKTRACE__)
  end
  ```
</CodeGroup>

### Erlang

Die AppSignal-Integration tut ihr Bestes, um aus Erlang ausgelöste Fehler in Elixir-Ausnahmen umzuwandeln. Zum Beispiel wird ein `:badarg`,
das von Erlang ausgelöst wird, automatisch in einen `ArgumentError` umgewandelt. Manchmal ist das Beste jedoch, den ursprünglich von Erlang stammenden Fehler in einen `ErlangError` einzuwickeln.

Da diese keinen großen Einblick in das zugrunde liegende Problem bieten, empfehlen wir, Informationen aus Ihrer Anwendung heraus hinzuzufügen, indem Sie den Fehler abfangen, selbst eine Elixir-Ausnahme erstellen und diese mit der Funktion `set_error/2` der aktuellen Span hinzufügen.

<Warning>
  **HINWEIS:** `Appsignal.set_error/2` wurde in AppSignal für Elixir 2.1.0 hinzugefügt. Wenn
  Sie eine niedrigere Version verwenden, verwenden Sie stattdessen `Appsignal.set_error/3`.
</Warning>

In Versionen vor 2.1.0 verwenden Sie `catch` und `Appsignal.send_error/3`:

<CodeGroup>
  ```elixir Elixir theme={null}
  try do
    raise "Exception!"
  catch
    kind, reason ->
      Appsignal.set_error(kind, reason, __STACKTRACE__)
  end
  ```
</CodeGroup>

Die Ausnahme wird von AppSignal wie jeder andere Fehler verfolgt, und es ermöglicht Ihnen,
benutzerdefinierte Fehlerbehandlung und Fallbacks bereitzustellen.

Wenn Sie beim Aufruf von `send_error` kein Fehlerobjekt haben, aber das Szenario dennoch als Fehler melden möchten, ist es auch möglich, eine benutzerdefinierte Fehler-Struct zu initialisieren.

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule MyCustomError do
    defexception message: "default message" # Customize if you call it without a custom message
  end

  case Worker.do_something() do
    :ok -> IO.puts "yay!"
    {:error, message} ->
      Appsignal.set_error(:error, %MyCustomError{ message: message }, [])
  end
  ```
</CodeGroup>

**Hinweis:** Diese Funktion funktioniert nur, wenn eine AppSignal-Transaktion aktiv ist.
Andernfalls wird der Fehler ignoriert.

Bitte beachten Sie
[`Appsignal.send_error/3`](#appsignalsend_error3) zum Senden von Fehlern
ohne eine AppSignal-Transaktion.

## Appsignal.send\_error/3

AppSignal bietet einen Mechanismus, um Fehler zu verfolgen, die in Code auftreten, der sich nicht in
einem Web- oder Hintergrund-Job-Kontext befindet, wie z. B. Mix-Tasks. Dies ist nützlich für
Instrumentierung, die nicht automatisch AppSignal-Transaktionen zum Profilieren erstellt.

Sie können die Funktion [`Appsignal.send_error/3`][hexdocs-send_error] verwenden, um
eine Ausnahme direkt von jeder Stelle in Ihrem Code an AppSignal zu senden, ohne
zuvor eine AppSignal-Transaktion zu starten.

<CodeGroup>
  ```elixir Elixir theme={null}
  try do
    raise "Exception!"
  catch
    kind, reason ->
      Appsignal.send_error(kind, reason, __STACKTRACE__)
  end
  ```
</CodeGroup>

Wenn Sie beim Aufruf von `send_error` kein Fehlerobjekt haben, aber das Szenario dennoch als Fehler melden möchten, ist es auch möglich, eine benutzerdefinierte Fehler-Struct zu initialisieren.

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule MyCustomError do
    defexception message: "default message" # Customize if you call it without a custom message
  end

  case Worker.do_something() do
    :ok -> IO.puts "yay!"
    {:error, message} ->
      Appsignal.send_error(:error, %MyCustomError{ message: message }, [])
  end
  ```
</CodeGroup>

### Zusätzliche Metadaten

Um Metadaten zum gesendeten Fehler hinzuzufügen, übergeben Sie eine Funktion als viertes Argument an
`Appsignal.send_errror/4`:

<CodeGroup>
  ```elixir Elixir theme={null}
  try do
    raise "Exception!"
  catch
    kind, reason ->
      Appsignal.send_error(kind, reason, __STACKTRACE__, fn span ->
        Appsignal.Span.set_attribute(span, "key", "value")
      end)
  end
  ```
</CodeGroup>

<Warning>
  **HINWEIS:** `Appsignal.send_error/4` wurde in AppSignal für Elixir 2.1.0 hinzugefügt.
</Warning>

[hexdocs-set_error-2]: https://hexdocs.pm/appsignal/Appsignal.Instrumentation.html#set_error/2

[hexdocs-send_error]: https://hexdocs.pm/appsignal/Appsignal.Instrumentation.html#send_error/3
