Elixir Error Tracking installation
Contents
- 1
Install the Elixir SDK
RequiredAdd the PostHog Elixir SDK to your list of dependencies in
mix.exs:ElixirThen run:
TerminalSource code contextThe Elixir SDK supports displaying the surrounding lines of source code in the Error Tracking UI. Since Elixir is a compiled language, source files must be packaged at build time. See the source context step below for setup instructions.
- 2
Configure PostHog
RequiredAdd your project token and host to your config:
config/config.exsTo get the most out of Error Tracking, set
in_app_otp_appsto your application name. This marks stack trace frames from your code as "in-app", making it easier to identify relevant frames in the PostHog UI:config/config.exs - 3
Errors are captured automatically
RequiredError Tracking is enabled by default. The SDK hooks into Elixir's built-in
Loggerhandler system, so it automatically captures:- Unhandled exceptions – crashes in GenServers, Tasks, and other OTP processes
- Logger.error calls – any
Logger.error/1message at or above the configured level
No additional code is needed. Any crash or error log in your application is sent to PostHog as a
$exceptionevent with full stack traces.What gets capturedThe handler captures log messages based on two rules:
- Crash reasons are always captured – any log with a
crash_reasonmetadata (e.g., GenServer/Task crashes) is captured regardless of log level. - Log level filtering – other messages at or above the configured
capture_level(default::error) are captured.
- 4
Add Phoenix/Plug integration (recommended)
RecommendedIf you're using Phoenix or Plug, add the
PostHog.Integrations.Plugmiddleware to automatically attach HTTP context (URL, host, path, IP) to error events.For Phoenix, add it to your
endpoint.exbefore the router:lib/my_app_web/endpoint.exFor Plug apps, add it to your router:
ElixirThis automatically includes
$current_url,$host,$pathname, and$ipon every error event that occurs during request processing. - 5
Identify users on errors (recommended)
RecommendedBy default, errors are attributed to
"unknown". To associate errors with specific users, set a context with adistinct_idearly in your request lifecycle – for example, in a Plug pipeline after authentication:ElixirThis is process-scoped, so any error that occurs in the same process (i.e., the same request) will include the user's distinct ID.
For Phoenix apps, a common pattern is to add this in a plug or controller action:
lib/my_app_web/plugs/set_posthog_context.exThen add it to your router pipeline:
Elixir - 6
Configure error tracking options (optional)
OptionalThe SDK supports several configuration options for Error Tracking:
config/config.exsOption Type Default Description in_app_otp_appslist of atoms []OTP app names whose stacktrace frames are marked as "in_app" in the UI. capture_levellog level or nil:errorMinimum log level to capture. Crashes with crash_reasonare always captured. Set tonilto only capture crashes.metadatalist of atoms or :all[]Logger metadata keys to include as event properties. enable_error_trackingboolean trueSet to falseto disable automatic Error Tracking entirely.global_propertiesmap %{}Properties added to all captured events (not just errors). - 7
Enable source code context (optional)
OptionalSince Elixir is a compiled language, source files aren't available at runtime by default. To display the surrounding lines of code in PostHog's Error Tracking UI, you need to package your source code at build time.
Step 1: Enable source context in your config:
config/config.exsStep 2: Package source code before building your release:
TerminalThis reads all
.exfiles from your project, compresses them intopriv/posthog_source.map, and bundles them with your release. When an error occurs, the SDK matches stack trace frames to the packaged source and includespre_context,context_line, andpost_contextin each frame.Development modeIn development, if
root_source_code_pathsis set and source files are accessible on disk, the SDK reads them directly at startup – no packaging step needed.Configuration options
Option Type Default Description enable_source_code_contextboolean falseEnable source code context in stack frames. root_source_code_pathslist of strings []Root paths to scan for source files. source_code_path_patternstring "**/*.ex"Glob pattern for files to include. source_code_exclude_patternslist of regexes [~r"^_build/", ~r"^priv/", ~r"^test/"]Patterns to exclude. context_linesinteger 5Number of lines to include before and after the error line. source_code_map_pathstring nilCustom path to a packaged source map file. Mix task options
Terminal Verify error tracking
RecommendedTrigger a test exception to confirm errors are being sent to PostHog. You should see them appear in the Error Tracking tab.
ElixirOr raise an exception in a controller or GenServer to test crash capture:
Elixir