Flexible error tracking for Elixir. Capture once. Report anywhere.

Tower listens for errors in your Elixir app, shapes them into a consistent event, and forwards that event to any reporter you choose; Slack, Rollbar, Sentry, email, custom, or all of them at once.

DOWNLOADS
152K
STARS
182
FOLLOWERS
50

A simple, predictable flow.

Diagram showing an Elixir App capturing an error, Tower building a Tower.Event, formatting and reporting it through a Tower.Reporter, and delivering it to an ErrorTrackingService

Error capturing, done right.

Captures exceptions, throws, exits, Logger messages, Telemetry events, and Plug errors

Normalizes everything into a %Tower.Event{} struct

Sends that event to one or many configured reporters

Completely decouples error capturing from error reporting

See the bigger picture - Visualization board coming soon

We're working on a standalone visualization board that goes beyond individual errors and bugs. A new way to explore items, trends, and system signals, all in one place.

Tower items dashboard preview

Choose one, several, or all of them.

Custom Reporter

Implement the Tower.Reporter behaviour to send events anywhere: databases, message queues, internal dashboards, anything.

Official Reporter Packages

Pre-built integrations with popular error tracking services.

Configured the way you want.

Choose how Tower reports errors, which log levels it captures, and what metadata is included.

config :tower,
reporters: [
TowerSlack,
TowerEmail
]

Reporters

config :tower,
log_level: :error

Log level

config :tower,
logger_metadata: [
:request_id,
:user_id
]

Metadata

00000

Ready to stop duplicating error logic?