@@ -1287,23 +1287,33 @@ defmodule Ecto.Adapters.SQL do
12871287 { true , level } ->
12881288 Logger . log (
12891289 level ,
1290- fn -> log_iodata ( measurements , repo , source , query , log_params , result , stacktrace , stacktrace_size ( stacktrace_config ) ) end ,
1290+ fn -> log_iodata ( measurements , repo , source , query , log_params , result , stacktrace , stacktrace_mfa ( stacktrace_config , opts ) ) end ,
12911291 ansi_color: sql_color ( query )
12921292 )
12931293
12941294 { opts_level , args_level } ->
12951295 Logger . log (
12961296 opts_level || args_level ,
1297- fn -> log_iodata ( measurements , repo , source , query , log_params , result , stacktrace , stacktrace_size ( stacktrace_config ) ) end ,
1297+ fn -> log_iodata ( measurements , repo , source , query , log_params , result , stacktrace , stacktrace_mfa ( stacktrace_config , opts ) ) end ,
12981298 ansi_color: sql_color ( query )
12991299 )
13001300 end
13011301
13021302 :ok
13031303 end
13041304
1305- defp stacktrace_size ( val ) when is_integer ( val ) , do: val
1306- defp stacktrace_size ( _ ) , do: 1
1305+ defp stacktrace_mfa ( stacktrace_config , opts ) do
1306+ case Keyword . get ( opts , :log_stacktrace_mfa ) do
1307+ { _ , _ , _ } = mfa ->
1308+ mfa
1309+
1310+ _ ->
1311+ case stacktrace_config do
1312+ { _ , _ , _ } = mfa -> mfa
1313+ _ -> { __MODULE__ , :last_non_ecto , [ 1 ] }
1314+ end
1315+ end
1316+ end
13071317
13081318 defp log_measurements ( [ { _ , nil } | rest ] , total , acc ) ,
13091319 do: log_measurements ( rest , total , acc )
@@ -1355,8 +1365,10 @@ defmodule Ecto.Adapters.SQL do
13551365 end
13561366 end
13571367
1358- defp log_stacktrace ( [ _ | _ ] = stacktrace , repo , size ) do
1359- for { { module , function , arity , info } , idx } <- Enum . with_index ( last_non_ecto ( Enum . reverse ( stacktrace ) , repo , size ) ) do
1368+ defp log_stacktrace ( [ _ | _ ] = stacktrace , repo , { module , function , args } ) do
1369+ entries = apply ( module , function , args ++ [ Enum . reverse ( stacktrace ) , repo ] )
1370+
1371+ for { { module , function , arity , info } , idx } <- Enum . with_index ( entries ) do
13601372 [
13611373 ?\n ,
13621374 IO.ANSI . light_black ( ) ,
@@ -1381,7 +1393,7 @@ defmodule Ecto.Adapters.SQL do
13811393
13821394 @ repo_modules [ Ecto.Repo.Queryable , Ecto.Repo.Schema , Ecto.Repo.Transaction ]
13831395
1384- defp last_non_ecto ( stacktrace , repo , size ) do
1396+ def last_non_ecto ( size , stacktrace , repo ) do
13851397 stacktrace
13861398 |> last_non_ecto_entries ( repo , [ ] )
13871399 |> Enum . take ( size )
0 commit comments