@@ -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_display = opts [ :url_display ] || :raw
57+
58+ case { url_display , 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
@@ -80,6 +90,9 @@ defmodule Tesla.Middleware.Logger do
8090 - `:filter_headers` - sanitizes sensitive headers before logging in debug mode (see below)
8191 - `:debug` - use `Logger.debug/2` to log request/response details
8292 - `:format` - custom string template or function for log message (see below)
93+ - `:url_display` - how to display the URL in the log message
94+ - `:raw` - use the raw URL (default)
95+ - `:template` - use the template URL (requires `Tesla.Middleware.KeepRequest` and `Tesla.Middleware.PathParams` middleware)
8396
8497 ## Custom log format
8598
@@ -224,7 +237,7 @@ defmodule Tesla.Middleware.Logger do
224237 if optional_runtime_format , do: Formatter . compile ( optional_runtime_format ) , else: @ format
225238
226239 level = log_level ( response , config )
227- Logger . log ( level , fn -> Formatter . format ( env , response , time , format ) end )
240+ Logger . log ( level , fn -> Formatter . format ( env , response , time , format , opts ) end )
228241
229242 if Keyword . get ( config , :debug , true ) do
230243 Logger . debug ( fn -> debug ( env , response , config ) end )
0 commit comments