]> granicus.if.org Git - ejabberd/commitdiff
Get stacktrace out of lager context
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sat, 1 Sep 2018 16:37:26 +0000 (19:37 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sat, 1 Sep 2018 16:37:26 +0000 (19:37 +0300)
Calling erlang:get_stacktrace() inside lager functions produces
stacktraces of the logging function itself, not the function which has failed.

src/ejabberd_acme.erl
src/ejabberd_hooks.erl
src/ejabberd_local.erl
src/ejabberd_router.erl
src/ejabberd_router_sql.erl
src/ejabberd_s2s.erl
src/ejabberd_sm.erl
src/gen_iq_handler.erl
src/mod_http_api.erl
src/mod_muc_room.erl
src/mod_roster.erl

index 14c0ad9ad84f5cf990a0281ba145ccb296db7aaa..6c503f205e1e193a83ea274d78a4545577a3bce3 100644 (file)
@@ -151,7 +151,8 @@ get_certificates(Domains) ->
                throw:Throw ->
                    Throw;
                E:R ->
-                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, erlang:get_stacktrace()]), 
+                    St = erlang:get_stacktrace(),
+                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, St]),
                    {error, get_certificates}
            end;
        false ->
@@ -243,7 +244,8 @@ get_certificate(CAUrl, DomainName, PrivateKey) ->
        throw:Throw ->
            Throw;
        E:R ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, erlang:get_stacktrace()]), 
+            St = erlang:get_stacktrace(),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, St]),
            {error, DomainName, get_certificate}
     end.
 
@@ -382,7 +384,8 @@ renew_certificates() ->
        throw:Throw ->
            Throw;
        E:R ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, erlang:get_stacktrace()]), 
+            St = erlang:get_stacktrace(),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, St]),
            {error, get_certificates}
     end.
 
@@ -447,7 +450,8 @@ list_certificates(Verbose) ->
                throw:Throw ->
                    Throw;
                E:R ->
-                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, erlang:get_stacktrace()]), 
+                    St = erlang:get_stacktrace(),
+                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, St]),
                    {error, list_certificates}
            end;
        false ->
@@ -489,7 +493,8 @@ format_certificate(DataCert, Verbose) ->
        end
     catch
        E:R ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, erlang:get_stacktrace()]), 
+            St = erlang:get_stacktrace(),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, St]),
            fail_format_certificate(DomainName)
     end.
 
@@ -614,7 +619,8 @@ revoke_certificates(DomainOrFile) ->
        throw:Throw ->
            Throw;
        E:R ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, erlang:get_stacktrace()]), 
+            St = erlang:get_stacktrace(),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, St]),
            {error, revoke_certificate}
     end.       
 
@@ -1118,7 +1124,8 @@ save_certificate({ok, DomainName, Cert}) ->
        throw:Throw ->
            Throw;
        E:R ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, erlang:get_stacktrace()]), 
+            St = erlang:get_stacktrace(),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, St]),
            {error, DomainName, saving}
     end.
 
index 2c992089b139832cb6ce6350b495ed4760ccfe30..bc67b4c67aa92e0f63bc961269a8d7a635579998 100644 (file)
@@ -380,11 +380,12 @@ safe_apply(Hook, Module, Function, Args) ->
                apply(Module, Function, Args)
        end
     catch E:R when E /= exit; R /= normal ->
+            St = get_stacktrace(),
            ?ERROR_MSG("Hook ~p crashed when running ~p:~p/~p:~n"
                       "** Reason = ~p~n"
                       "** Arguments = ~p",
                       [Hook, Module, Function, length(Args),
-                       {E, R, get_stacktrace()}, Args]),
+                       {E, R, St}, Args]),
            'EXIT'
     end.
 
index 37087526b5d3e4f8fa455a013c215bc0dab83e6a..d9ef971299d18f13361cec702a7f03402cfdd1c6 100644 (file)
@@ -71,8 +71,9 @@ start_link() ->
 route(Packet) ->
     try do_route(Packet)
     catch E:R ->
+            St = erlang:get_stacktrace(),
            ?ERROR_MSG("failed to route packet:~n~s~nReason = ~p",
-                      [xmpp:pp(Packet), {E, {R, erlang:get_stacktrace()}}])
+                      [xmpp:pp(Packet), {E, {R, St}}])
     end.
 
 -spec route_iq(iq(), function()) -> ok.
index b668f2b37b16a2f7de85c85c4de419492f8ea344..cf4bd8e42dcb9619e29134e302b12ae34a37f71c 100644 (file)
@@ -91,8 +91,9 @@ start_link() ->
 route(Packet) ->
     try do_route(Packet)
     catch E:R ->
+            St = erlang:get_stacktrace(),
            ?ERROR_MSG("failed to route packet:~n~s~nReason = ~p",
-                      [xmpp:pp(Packet), {E, {R, erlang:get_stacktrace()}}])
+                      [xmpp:pp(Packet), {E, {R, St}}])
     end.
 
 -spec route(jid(), jid(), xmlel() | stanza()) -> ok.
index b7017d5281b4a4b51ccd3acf7f2df32c99833696..edf06dfe0e26f9d946603c95344fb82149696b23 100644 (file)
@@ -122,10 +122,11 @@ row_to_route(Domain, {ServerHost, NodeS, PidS, LocalHintS} = Row) ->
     catch _:{bad_node, _} ->
            [];
          E:R ->
+            St = erlang:get_stacktrace(),
            ?ERROR_MSG("failed to decode row from 'route' table:~n"
                       "Row = ~p~n"
                       "Domain = ~s~n"
                       "Reason = ~p",
-                      [Row, Domain, {E, {R, erlang:get_stacktrace()}}]),
+                      [Row, Domain, {E, {R, St}}]),
            []
     end.
index 7b043d12526b30b50dc9be6b7aa8f9982fd69be6..74234e26edc99fa30ea6a2e0f83e40c4d31ee8fb 100644 (file)
@@ -95,8 +95,9 @@ start_link() ->
 route(Packet) ->
     try do_route(Packet)
     catch E:R ->
+            St = erlang:get_stacktrace(),
             ?ERROR_MSG("failed to route packet:~n~s~nReason = ~p",
-                       [xmpp:pp(Packet), {E, {R, erlang:get_stacktrace()}}])
+                       [xmpp:pp(Packet), {E, {R, St}}])
     end.
 
 clean_temporarily_blocked_table() ->
index f83ead7ff0b18dc764fbd843d31e0dec4a3f085a..9e9a2d1910480937a9d32432421c4fdfc55e93fe 100644 (file)
@@ -142,9 +142,10 @@ route(Packet) ->
        Packet1 ->
            try do_route(Packet1), ok
            catch E:R ->
+                    St = erlang:get_stacktrace(),
                    ?ERROR_MSG("failed to route packet:~n~s~nReason = ~p",
                               [xmpp:pp(Packet1),
-                               {E, {R, erlang:get_stacktrace()}}])
+                               {E, {R, St}}])
            end
     end.
 
index 636a94ec9396c37b75e3c4b2786d27acfb7465ed..49d1d8e3ecfc54e938a07a567809e213e7dddf66 100644 (file)
@@ -114,8 +114,9 @@ process_iq(_Host, Module, Function, IQ) ->
        ignore ->
            ok
     catch E:R ->
+            St = erlang:get_stacktrace(),
            ?ERROR_MSG("failed to process iq:~n~s~nReason = ~p",
-                      [xmpp:pp(IQ), {E, {R, erlang:get_stacktrace()}}]),
+                      [xmpp:pp(IQ), {E, {R, St}}]),
            Txt = <<"Module failed to handle the query">>,
            Err = xmpp:err_internal_server_error(Txt, IQ#iq.lang),
            ejabberd_router:route_error(IQ, Err)
index e451b82c83291fcae99c05030f00e0ca5bd1845b..84866d4d06e1a0160de2521ff2f0ba262debba76 100644 (file)
@@ -193,7 +193,8 @@ process([Call], #request{method = 'POST', data = Data, ip = IPPort} = Req) ->
            ?DEBUG("Bad Request: ~p", [_Err]),
            badrequest_response(<<"Invalid JSON input">>);
          _:_Error ->
-            ?DEBUG("Bad Request: ~p ~p", [_Error, erlang:get_stacktrace()]),
+            St = erlang:get_stacktrace(),
+            ?DEBUG("Bad Request: ~p ~p", [_Error, St]),
             badrequest_response()
     end;
 process([Call], #request{method = 'GET', q = Data, ip = {IP, _}} = Req) ->
@@ -210,9 +211,9 @@ process([Call], #request{method = 'GET', q = Data, ip = {IP, _}} = Req) ->
         throw:{error, unknown_command} ->
             json_format({404, 44, <<"Command not found.">>});
         _:_Error ->
-
-        ?DEBUG("Bad Request: ~p ~p", [_Error, erlang:get_stacktrace()]),
-        badrequest_response()
+            St = erlang:get_stacktrace(),
+            ?DEBUG("Bad Request: ~p ~p", [_Error, St]),
+            badrequest_response()
     end;
 process([_Call], #request{method = 'OPTIONS', data = <<>>}) ->
     {200, ?OPTIONS_HEADER, []};
@@ -314,7 +315,8 @@ handle(Call, Auth, Args, Version) when is_atom(Call), is_list(Args) ->
                  throw:Msg when is_list(Msg); is_binary(Msg) ->
                    {400, iolist_to_binary(Msg)};
                  _Error ->
-                   ?ERROR_MSG("REST API Error: ~p ~p", [_Error, erlang:get_stacktrace()]),
+                    St = erlang:get_stacktrace(),
+                   ?ERROR_MSG("REST API Error: ~p ~p", [_Error, St]),
                    {500, <<"internal_error">>}
            end;
         {error, Msg} ->
index 88bf4f099e692f6aea20010d5689024ef565169b..136637ee3d51eff5d8a8a7e368f923896b2b7948 100644 (file)
@@ -2815,9 +2815,9 @@ process_item_change(Item, SD, UJID) ->
                        undefined ->
                                <<"">>
                end,
+                St = erlang:get_stacktrace(),
                ?ERROR_MSG("failed to set item ~p~s: ~p",
-                      [Item, FromSuffix,
-                       {E, {R, erlang:get_stacktrace()}}]),
+                      [Item, FromSuffix, {E, {R, St}}]),
            {error, xmpp:err_internal_server_error()}
     end.
 
index 5c0d3eecac47776fa6a2fc74ddec35fe7042efd2..1f42b69e0e1c23af9b1bdb0454e40cc67f52a472 100644 (file)
@@ -321,8 +321,9 @@ process_iq_get(#iq{to = To, lang = Lang,
                                 ver = Version}
           end)
     catch E:R ->
+            St = erlang:get_stacktrace(),
            ?ERROR_MSG("failed to process roster get for ~s: ~p",
-                      [jid:encode(To), {E, {R, erlang:get_stacktrace()}}]),
+                      [jid:encode(To), {E, {R, St}}]),
            Txt = <<"Roster module has failed">>,
            xmpp:make_error(IQ, xmpp:err_internal_server_error(Txt, Lang))
     end.