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.
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
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.
More insights, same solid foundations.
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.
< tower_email >
< tower_error_tracker >
< tower_slack >
< tower_rollbar >
< tower_sentry >
< you_choose >
Reporters
config :tower,
reporters: [
TowerSlack,
TowerEmail
]
Log level
config :tower,
log_level: :error
Metadata
config :tower,
logger_metadata: [
:request_id,
:user_id
]
What I appreciate the most is the consistent event structure. Every service used to talk in a different language, Tower unified everything.
Rafael Soto
Backend Lead, NovaCloud
Tower gave us zero vendor lock-in. Moving between services went from painful to completely seamless.
Laura Mendes
Senior Elixir Engineer, BrightForge
With Tower we achieved a cleaner, simpler architecture. We reduced complexity without losing visibility.
Maya Ríos
Platform Architect, Horizon Data