tesla v1.1.0 Tesla.Middleware.Logger View Source

Log requests using Elixir’s Logger.

With the default settings it logs request method, url, response status and time taken in milliseconds.

Example usage

defmodule MyClient do
  use Tesla

  plug Tesla.Middleware.Logger
end

Options

  • :log_level - custom function for calculating log level (see below)

Custom log format

The default log format is "$method $url -> $status ($time ms)" which shows in logs like:

2018-03-25 18:32:40.397 [info]  GET https://bitebot.io -> 200 (88.074 ms)

Because log format is processed during compile time it needs to be set in config:

config :tesla, Tesla.Middleware.Logger, format: "$method $url ====> $status / time=$time"

Custom log levels

By default, the following log levels will be used:

  • :error - for errors, 5xx and 4xx responses
  • :warn - for 3xx responses
  • :info - for 2xx responses

You can customize this setting by providing your own log_level/1 function:

defmodule MyClient do
  use Tesla

  plug Tesla.Middleware.Logger, log_level: &my_log_level/1

  def my_log_level(env) do
    case env.status do
      404 -> :info
      _ -> :default
    end
  end
end

Logger Debug output

When the Elixir Logger log level is set to :debug Tesla Logger will show full request & response.

If you want to disable detailed request/response logging but keep the :debug log level (i.e. in development) you can set debug: false in your config:

# config/dev.local.exs
config :tesla, Tesla.Middleware.Logger, debug: false

Link to this section Summary

Link to this section Types

Link to this type log_level() View Source
log_level() :: :info | :warn | :error

Link to this section Functions

Callback implementation for Tesla.Middleware.call/3.

Link to this function default_log_level(env) View Source
default_log_level(Tesla.Env.t()) :: log_level()