# 🌲 Timber integration for Ecto

[![ISC License](](
[![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

1. 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.1"},
        {:timber_ecto, "~> 2.0"}

2. Run `mix deps.get` to get the dependencies.

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

4. 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(
        [:my_app, :repo, :query],
      # ...
      Supervisor.start_link(children, opts)

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(
  [:my_app, :repo, :query],
  [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.