Skip to content

Commit dd2e4c0

Browse files
committed
feat: Add :metadata option to Logger middleware
1 parent cc50c2b commit dd2e4c0

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

lib/tesla/middleware/logger.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ defmodule Tesla.Middleware.Logger do
7979
- `:level` - custom function for calculating log level or atom for fixed level (see below)
8080
- `:log_level` - (deprecated) custom function for calculating log level (see below)
8181
- `:filter_headers` - sanitizes sensitive headers before logging in debug mode (see below)
82+
- `:metadata` - metadata to pass to `Logger`
8283
- `:debug` - use `Logger.debug/2` to log request/response details
8384
- `:format` - custom string template or function for log message (see below)
8485
@@ -267,11 +268,12 @@ defmodule Tesla.Middleware.Logger do
267268
format =
268269
if optional_runtime_format, do: Formatter.compile(optional_runtime_format), else: @format
269270

271+
metadata = Keyword.get(config, :metadata, [])
270272
level = log_level(response, config)
271-
Logger.log(level, fn -> Formatter.format(env, response, time, format) end)
273+
Logger.log(level, fn -> Formatter.format(env, response, time, format) end, metadata)
272274

273275
if Keyword.get(config, :debug, true) do
274-
Logger.debug(fn -> debug(env, response, config) end)
276+
Logger.debug(fn -> debug(env, response, config) end, metadata)
275277
end
276278

277279
response

test/tesla/middleware/logger_test.exs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,20 @@ defmodule Tesla.Middleware.LoggerTest do
223223
end
224224
end
225225

226+
describe "with metadata" do
227+
setup do
228+
middleware = [{Tesla.Middleware.Logger, metadata: [request_id: "abc123"]}]
229+
adapter = fn env -> {:ok, %{env | status: 200, body: "ok"}} end
230+
client = Tesla.client(middleware, adapter)
231+
%{client: client}
232+
end
233+
234+
test "metadata is passed to the main log call", %{client: client} do
235+
log = capture_log([metadata: [:request_id]], fn -> Tesla.get(client, "/ok") end)
236+
assert log =~ "[info] request_id=abc123"
237+
end
238+
end
239+
226240
describe "with level" do
227241
defmodule ClientWithLevel do
228242
use Tesla

0 commit comments

Comments
 (0)