---
title: Adding context to errors
description: Add context to Elixir error reports with custom metadata to improve debugging and error resolution.
url: https://docs.honeybadger.io/lib/elixir/errors/context/
---

Honeybadger can display additional custom key/value metadata — or “context” — with each error report. Context is what you’re looking for if:

* You want to record the current user’s id or email address at the time of an exception
* You need to send raw POST data for use in debugging
* You have any other metadata you’d like to send with an exception

There are two ways to add context to errors in your code: [global](https://docs.honeybadger.io/lib/elixir/errors/context/#global-context) and [local](https://docs.honeybadger.io/lib/elixir/errors/context/#local-context). While you can add any key/value data to context, a few keys [have a special meaning in Honeybadger](https://docs.honeybadger.io/lib/elixir/errors/context/#special-context-keys).

## Global context

`Honeybadger.context/1` is provided for adding extra data to the notification that gets sent to Honeybadger. You can make use of this in places such as a Plug in your Phoenix Router or Controller to ensure useful debugging data is sent along.

```elixir
def MyPhoenixApp.Controller
  use MyPhoenixApp.Web, :controller


  plug :set_honeybadger_context


  def set_honeybadger_context(conn, _opts) do
    user = get_user(conn)
    Honeybadger.context(user_id: user.id, account: user.account.name)
    conn
  end
end
```

`Honeybadger.context/1` stores the context data in the process dictionary, so it will be sent with errors/notifications on the same process. The following `Honeybadger.notify/1` call will not see the context data set in the previous line.

```elixir
Honeybadger.context(user_id: 5)
Task.start(fn ->
  # this notify does not see the context set earlier
  # as this runs in a different elixir/erlang process.
  Honeybadger.notify(%RuntimeError{message: "critical error"})
end)
```

## Local context

You can also add context to a manual error report using the `metadata` option, like this:

```elixir
context = %{user_id: 5, account_name: "Foo"}
Honeybadger.notify(exception, metadata: context, stacktrace: __STACKTRACE__)
```

Local context always overrides any global values when the error is reported.

## Special context keys

While you can add any key/value data to context, a few keys have special meaning in Honeybadger:

| Option       | Description                                                                                           |
| ------------ | ----------------------------------------------------------------------------------------------------- |
| `user_id`    | The `String` user ID used by Honeybadger to aggregate user data across occurrences on the error page. |
| `user_email` | Same as `user_id`, but for email addresses                                                            |

## Limits

Honeybadger uses the following limits to ensure the service operates smoothly for everyone:

* Nested objects have a max depth of 20
* Context values have a max size of 64Kb

When an error notification includes context data that exceed these limits, the context data will be truncated, and the notification will still be processed.

---

## Try Honeybadger for FREE

Intelligent logging, error tracking, and Just Enough APM™ in one dev-friendly platform. Find and fix problems before users notice.

[Start free trial](https://app.honeybadger.io/users/sign_up)

[See plans and pricing](https://www.honeybadger.io/plans/)
