🌲 Timber integration for Ecto
The Timber Ecto library provides enhanced logging for your Ecto queries.
Need Ecto 2.x support? Ecto 2 support is maintained on the v1.x branch.
Installation
Ensure that you have both
:timber(version 3.0.0 or later) and:timber_ectolisted as dependencies inmix.exs:def deps do [ {:timber, "~> 3.1"}, {:timber_ecto, "~> 2.0"} ] endRun
mix deps.getto get the dependencies.Add a configuration line for every Ecto Repo. For example, if you have the application
:my_appand the Ecto RepoMyApp.Repo, the configuration inconfig/config.exswould look like this:use Mix.Config config :my_app, MyApp.Repo, log: falseAttach Timber's Telemetry event handler in your Application's
startcallback:# lib/my_app/application.ex def start(_type, _args) do # ... :ok = :telemetry.attach( "timber-ecto-query-handler", [:my_app, :repo, :query], &Timber.Ecto.handle_event/4, [] ) # ... Supervisor.start_link(children, opts) end
For more information, see the documentation for the Timber.Ecto module.
Notes for Umbrella Applications
When integrating Timber with Ecto for an umbrella application, the
:timber_ecto library needs to be a dependency for every application that
defines an Ecto Repo.
Advanced
Logging SQL queries can be useful but noisy. To reduce the volume of SQL queries you can limit your logging to queries that surpass an execution time threshold:
:ok = Telemetry.attach(
"timber-ecto-query-handler",
[:my_app, :repo, :query],
Timber.Ecto,
:handle_event,
[query_time_ms_threshold: 2_000]
)In the above example, only queries that exceed 2 seconds in execution time will be logged.
License
This project is licensed under the ISC license. See the file LICENSE for the
full text.