Installation

The Raygun Elixir client adds Raygun-based error handling to your Elixir code. It catches all occuring errors, extracts as much information as possible and sends the error to Raygun where it is viewable in the Crash Reporting dashboard.

note: You can view the sample app here which utilizes the client.

Installation

defp deps do
  [
    {:raygun, "~> 0.3.1"}
  ]
end

You can run mix help deps to learn about dependencies.


In your project's config/config.exs file, add the API Key -

import Config

config :raygun,
    api_key: "paste_your_api_key_here"

Run the mix deps.get command to install the dependencies.


Add a call to Raygun.report_message in your application.ex to raise a test exception.

Then run mix run --no-halt to run the app.

You can deploy Raygun into your production environment for the best and accurate results.


You can add other optional configuration options as well. They will be sent with every error.

tags

List of metadata strings.

url

A reference URL.

client_name

The name of the application as you want it to appear in Raygun.

client_version

The version of the application as you want it to appear in Raygun.

config :raygun,
    api_key: "paste_your_api_key_here",
    tags: ["tag1", "tag2"],
    url: "http://docs.myapp.example.com",
    client_name: "MyApp",
    client_version: "2.3.4"

If you use a Plug, the client_version should be auto detected for you.


Currently, the client supports 3 routes on how to use Raygun -

  • With Plug in Phoenix
  • Through the Logger
  • With default Elixir code

It is recommended to not use all 3 if you'd like to not see multiple messages of the same error.

defmodule YourApp.Router do
  use Phoenix.Router
  use Raygun.Plug

  # ...
end

You can also provide a function that takes a Plug.Conn and returns a map with information about the logged in user.

defmodule YourApp.Router do
  use Phoenix.Router
  use Raygun.Plug, user: fn(conn) ->
    %{
      identifier: "<user id>",
      isAnonymous: false, # false if logged in, true if not logged in
      email: "email@example.com",
      fullName: "John Doe",
      firstName: "John",
      uuid: "<uuid>"
    }
  end

  # ...
end

Any error logged with automatically be sent to Raygun.

Configure the Logger to use the Raygun backend. You can do this programmatically.

Logger.add_backend(Raygun.Logger)

or via configuration by adding Raygun as a backend in config/config.exs:

config :logger,
  backends: [:console, Raygun.Logger]

Any messages logged at :error level will be automatically sent to Raygun.

If you would like messages to be associated with a system user then add the following configuration to config/config.exs:

config :raygun,
    system_user: %{
      identifier: "myuserid",
      isAnonymous: true,
      email: "myuserid@example.com",
      fullName: "Jane Doe",
      firstName: "Jane",
      uuid: "b07eb66c-9055-4847-a173-881b77cdc83e"
    }

Start the Raygun application (if you did not configure it as an application in mix.exs)

Raygun.start

Send a string message to Raygun:

Raygun.report_message "Oh noes."

This will report an exception programmatically. Be sure that System.stacktrace will be the correct stack trace!

try do
  :foo = :bar
rescue
  exception -> Raygun.report_exception(exception)
end

You can also capture the stacktrace explicitly yourself and pass it to Raygun.

try do
  :foo = :bar
rescue
  exception ->
    stacktrace = System.stacktrace
    Raygun.report_stacktrace(stacktrace, exception)
end

Both forms allow some custom context to be passed as an optional final parameters as a Map. This will appear as userCustomData under the 'Custom tab' in Raygun's web interface.

try do
  :foo = :bar
rescue
  exception ->
    Raygun.report_stacktrace(System.stacktrace, exception, %{env: Mix.env})
end

The provider is community built and available to download via the Scalpel Software - raygun repository.