Skip to content

Commit 5029174

Browse files
authored
fix: legacy log level handling to support atom values for backward compatibility
1 parent ea8865e commit 5029174

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

lib/tesla/middleware/logger.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,10 +314,15 @@ defmodule Tesla.Middleware.Logger do
314314
end
315315

316316
# Wrapper function to adapt old log_level functions to the new response tuple format
317-
defp legacy_log_level_wrapper(log_level_function, {:ok, env}) do
317+
defp legacy_log_level_wrapper(log_level_function, {:ok, env})
318+
when is_function(log_level_function) do
318319
log_level_function.(env)
319320
end
320321

322+
defp legacy_log_level_wrapper(log_level_atom, {:ok, _env}) when is_atom(log_level_atom) do
323+
log_level_atom
324+
end
325+
321326
defp legacy_log_level_wrapper(_log_level_function, {:error, _}) do
322327
:error
323328
end

test/tesla/middleware/logger_test.exs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,62 @@ defmodule Tesla.Middleware.LoggerTest do
337337

338338
assert output =~ ":log_level option is deprecated"
339339
end
340+
341+
test "log_level with atom value still works (backward compatibility)" do
342+
Logger.configure(level: :debug)
343+
344+
warning_output =
345+
ExUnit.CaptureIO.capture_io(:stderr, fn ->
346+
client =
347+
Tesla.client(
348+
[
349+
{Tesla.Middleware.Logger, log_level: :debug}
350+
],
351+
fn env -> {:ok, %{env | status: 200}} end
352+
)
353+
354+
log_output = capture_log(fn -> Tesla.get(client, "/test") end)
355+
assert log_output =~ "[debug] GET /test -> 200"
356+
end)
357+
358+
assert warning_output =~ ":log_level option is deprecated"
359+
end
360+
361+
test "log_level with atom value for warning levels" do
362+
warning_output =
363+
ExUnit.CaptureIO.capture_io(:stderr, fn ->
364+
client =
365+
Tesla.client(
366+
[
367+
{Tesla.Middleware.Logger, log_level: :warn}
368+
],
369+
fn env -> {:ok, %{env | status: 200}} end
370+
)
371+
372+
log = capture_log(fn -> Tesla.get(client, "/test") end)
373+
assert log =~ "[warning] GET /test -> 200"
374+
end)
375+
376+
assert warning_output =~ ":log_level option is deprecated"
377+
end
378+
379+
test "log_level with atom value handles error responses" do
380+
warning_output =
381+
ExUnit.CaptureIO.capture_io(:stderr, fn ->
382+
client =
383+
Tesla.client(
384+
[
385+
{Tesla.Middleware.Logger, log_level: :info}
386+
],
387+
fn _env -> {:error, :connection_failed} end
388+
)
389+
390+
log = capture_log(fn -> Tesla.get(client, "/test") end)
391+
assert log =~ "[error] GET /test -> error: :connection_failed"
392+
end)
393+
394+
assert warning_output =~ ":log_level option is deprecated"
395+
end
340396
end
341397

342398
alias Tesla.Middleware.Logger.Formatter

0 commit comments

Comments
 (0)