Skip to content

Commit 4e7db88

Browse files
committed
feat: add url policy to logger middleware
1 parent 649497f commit 4e7db88

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

lib/tesla/middleware/logger.ex

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,42 @@ defmodule Tesla.Middleware.Logger.Formatter do
2929
Tesla.Env.t(),
3030
Tesla.Env.result(),
3131
integer,
32-
format | function | {module, atom}
32+
format | function | {module, atom},
33+
keyword
3334
) :: IO.chardata()
34-
def format(request, response, time, fun) when is_function(fun) do
35+
def format(request, response, time, fun, _opts) when is_function(fun) do
3536
apply(fun, [request, response, time])
3637
end
3738

38-
def format(request, response, time, {mod, fun}) do
39+
def format(request, response, time, {mod, fun}, _opts) do
3940
apply(mod, fun, [request, response, time])
4041
end
4142

42-
def format(request, response, time, format) do
43-
Enum.map(format, &output(&1, request, response, time))
43+
def format(request, response, time, format, opts) do
44+
Enum.map(format, &output(&1, request, response, time, opts))
4445
end
4546

46-
defp output(:query, env, _, _) do
47+
defp output(:query, env, _response, _time, _opts) do
4748
encoding = Keyword.get(env.opts, :query_encoding, :www_form)
4849

4950
Tesla.encode_query(env.query, encoding)
5051
end
5152

52-
defp output(:method, env, _, _), do: env.method |> to_string() |> String.upcase()
53-
defp output(:url, env, _, _), do: env.url
54-
defp output(:status, _, {:ok, env}, _), do: to_string(env.status)
55-
defp output(:status, _, {:error, reason}, _), do: "error: " <> inspect(reason)
56-
defp output(:time, _, _, time), do: :io_lib.format("~.3f", [time / 1000])
57-
defp output(binary, _, _, _), do: binary
53+
defp output(:method, env, _resp, _time, _opts), do: env.method |> to_string() |> String.upcase()
54+
defp output(:url, env, _resp, _time, opts) do
55+
req_url = env.opts[:req_url]
56+
url_policy = opts[:url_policy] || :raw
57+
58+
case {url_policy, req_url} do
59+
{:raw, _} -> env.url
60+
{:template, nil} -> env.url
61+
{:template, req_url} -> req_url
62+
end
63+
end
64+
defp output(:status, _req, {:ok, env}, _time, _opts), do: to_string(env.status)
65+
defp output(:status, _req, {:error, reason}, _time, _opts), do: "error: " <> inspect(reason)
66+
defp output(:time, _req, _resp, time, _opts), do: :io_lib.format("~.3f", [time / 1000])
67+
defp output(binary, _req, _resp, _time, _opts), do: binary
5868
end
5969

6070
defmodule Tesla.Middleware.Logger do
@@ -224,7 +234,7 @@ defmodule Tesla.Middleware.Logger do
224234
if optional_runtime_format, do: Formatter.compile(optional_runtime_format), else: @format
225235

226236
level = log_level(response, config)
227-
Logger.log(level, fn -> Formatter.format(env, response, time, format) end)
237+
Logger.log(level, fn -> Formatter.format(env, response, time, format, opts) end)
228238

229239
if Keyword.get(config, :debug, true) do
230240
Logger.debug(fn -> debug(env, response, config) end)

0 commit comments

Comments
 (0)