🌲 Timber integration for Ecto

ISC License Hex.pm Documentation Build Status

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_ecto listed as dependencies in mix.exs:

def deps do
  [
    {:timber, "~> 3.0"},
    {:timber_ecto, "~> 2.0"}
  ]
end

Then run mix deps.get.

You'll need to add a configuration line for every Ecto Repo. For example, if you have the application :my_app and the Ecto Repo MyApp.Repo, the configuration in config/config.exs would look like this:

use Mix.Config

config :my_app, MyApp.Repo,
  log: false

You'll also have to attach Timber's Telemetry event handler in your Application's start callback:

# 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.