@@ -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
5868end
5969
6070defmodule 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