Pular para o conteúdo principal
Na maioria das aplicações, alguns erros serão levantados que não estão relacionados a possíveis bugs no seu código; eles simplesmente acontecem quando seu app entra em contato com o mundo real. Bots podem passar e tentar postar formulários automaticamente, links desatualizados podem direcionar visitantes a conteúdos que não existem mais, e por aí vai. Para evitar que esses erros sejam levantados como problemas no AppSignal, é possível adicionar tratamento de exceções ao seu código ou até mesmo fazer o AppSignal ignorar completamente certos erros.

Ignorar erros

A configuração do AppSignal permite ignorar erros. Ao fornecer uma lista de erros específicos, o AppSignal não enviará alertas quando esses erros forem levantados.

Appsignal.set_error/3

Se você quiser fazer rescue de exceções na sua aplicação para evitar crashes, mas ainda quiser rastrear a ocorrência, você pode usar Appsignal.set_error/2 para adicionar a exceção à transação atual do AppSignal:
try do
  raise "Exception!"
rescue
  exception -> Appsignal.set_error(exception, __STACKTRACE__)
end

Erlang

A integração do AppSignal faz o possível para converter erros levantados do Erlang em exceções Elixir. Por exemplo, um :badarg levantado pelo Erlang é automaticamente convertido em um ArgumentError. No entanto, às vezes o melhor que ela consegue fazer é envolver o erro originado do Erlang em um ErlangError. Como esses não fornecem muito insight sobre o problema subjacente, recomendamos adicionar informações de dentro da sua aplicação, capturando o erro, criando uma exceção Elixir você mesmo e adicionando-a ao span atual usando a função set_error/2.
NOTA: Appsignal.set_error/2 foi adicionado no AppSignal for Elixir 2.1.0. Se você estiver em uma versão inferior, use Appsignal.set_error/3 em vez disso.
Em versões anteriores à 2.1.0, use catch e Appsignal.send_error/3:
try do
  raise "Exception!"
catch
  kind, reason ->
    Appsignal.set_error(kind, reason, __STACKTRACE__)
end
A exceção será rastreada pelo AppSignal como qualquer outro erro, e permite que você forneça tratamento de erro e fallbacks personalizados. Se você não tiver um objeto de erro ao chamar send_error, mas ainda quiser reportar o cenário como um erro, também é possível inicializar uma struct de erro personalizada.
defmodule MyCustomError do
  defexception message: "default message" # Personalize se você chamá-lo sem uma mensagem personalizada
end

case Worker.do_something() do
  :ok -> IO.puts "yay!"
  {:error, message} ->
    Appsignal.set_error(:error, %MyCustomError{ message: message }, [])
end
Nota: Esta função só funciona quando há uma transação AppSignal ativa. Caso contrário, o erro será ignorado. Consulte Appsignal.send_error/3 para enviar erros sem uma transação AppSignal.

Appsignal.send_error/3

O AppSignal fornece um mecanismo para rastrear erros que ocorrem em código que não está em um contexto web ou de background job, como Mix tasks. Isso é útil para instrumentação que não cria automaticamente transações AppSignal para fazer profile. Você pode usar a função Appsignal.send_error/3 para enviar diretamente uma exceção para o AppSignal a partir de qualquer lugar do seu código sem iniciar primeiro uma transação AppSignal.
try do
  raise "Exception!"
catch
  kind, reason ->
    Appsignal.send_error(kind, reason, __STACKTRACE__)
end
Se você não tiver um objeto de erro ao chamar send_error, mas ainda quiser reportar o cenário como um erro, também é possível inicializar uma struct de erro personalizada.
defmodule MyCustomError do
  defexception message: "default message" # Personalize se você chamá-lo sem uma mensagem personalizada
end

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

Metadados adicionais

Para adicionar metadados ao erro enviado, passe uma função como o quarto argumento para Appsignal.send_errror/4:
try do
  raise "Exception!"
catch
  kind, reason ->
    Appsignal.send_error(kind, reason, __STACKTRACE__, fn span ->
      Appsignal.Span.set_attribute(span, "key", "value")
    end)
end
NOTA: Appsignal.send_error/4 foi adicionado no AppSignal for Elixir 2.1.0.