]> granicus.if.org Git - ejabberd/commitdiff
Use correct stacktrace in logging macros
authorEvgeny Khramtsov <ekhramtsov@process-one.net>
Tue, 25 Jun 2019 21:05:41 +0000 (00:05 +0300)
committerEvgeny Khramtsov <ekhramtsov@process-one.net>
Tue, 25 Jun 2019 21:05:41 +0000 (00:05 +0300)
By calling erlang:get_stacktrace() inside a lager function
we obtain actually a stacktrace of the lager function, not
the one we got during exception. This is not a problem for
newest Erlang versions though.

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

index 95e54c520108302e529aa2e573e8a75bc3f1c8c8..8cb1b2625cd18cf96952118e3ecc3fcbe910fa3f 100644 (file)
@@ -151,7 +151,8 @@ get_certificates(Domains) ->
                throw:Throw ->
                    Throw;
                ?EX_RULE(E, R, St) ->
-                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, ?EX_STACK(St)]),
+                   StackTrace = ?EX_STACK(St),
+                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, StackTrace]),
                    {error, get_certificates}
            end;
        false ->
@@ -243,7 +244,8 @@ get_certificate(CAUrl, DomainName, PrivateKey) ->
        throw:Throw ->
            Throw;
        ?EX_RULE(E, R, St) ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, ?EX_STACK(St)]),
+           StackTrace = ?EX_STACK(St),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, StackTrace]),
            {error, DomainName, get_certificate}
     end.
 
@@ -382,7 +384,8 @@ renew_certificates() ->
        throw:Throw ->
            Throw;
        ?EX_RULE(E, R, St) ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, ?EX_STACK(St)]),
+           StackTrace = ?EX_STACK(St),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, StackTrace]),
            {error, get_certificates}
     end.
 
@@ -447,7 +450,8 @@ list_certificates(Verbose) ->
                throw:Throw ->
                    Throw;
                ?EX_RULE(E, R, St) ->
-                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, ?EX_STACK(St)]),
+                   StackTrace = ?EX_STACK(St),
+                   ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, StackTrace]),
                    {error, list_certificates}
            end;
        false ->
@@ -489,7 +493,8 @@ format_certificate(DataCert, Verbose) ->
        end
     catch
        ?EX_RULE(E, R, St) ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, ?EX_STACK(St)]),
+           StackTrace = ?EX_STACK(St),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, StackTrace]),
            fail_format_certificate(DomainName)
     end.
 
@@ -614,7 +619,8 @@ revoke_certificates(DomainOrFile) ->
        throw:Throw ->
            Throw;
        ?EX_RULE(E, R, St) ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, ?EX_STACK(St)]),
+           StackTrace = ?EX_STACK(St),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, StackTrace]),
            {error, revoke_certificate}
     end.
 
@@ -1085,7 +1091,8 @@ save_certificate({ok, DomainName, Cert}) ->
        throw:Throw ->
            Throw;
        ?EX_RULE(E, R, St) ->
-           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, ?EX_STACK(St)]),
+           StackTrace = ?EX_STACK(St),
+           ?ERROR_MSG("Unknown ~p:~p, ~p", [E, R, StackTrace]),
            {error, DomainName, saving}
     end.
 
index 9cc3cc12339b55ba54dc27b4c245eea24e0938cf..3f8aa749b79d11ce93cff313cf98e7d522dc4f7d 100644 (file)
@@ -73,8 +73,9 @@ start_link() ->
 route(Packet) ->
     try do_route(Packet)
     catch ?EX_RULE(E, R, St) ->
+           StackTrace = ?EX_STACK(St),
            ?ERROR_MSG("Failed to route packet:~n~s~nReason = ~p",
-                      [xmpp:pp(Packet), {E, {R, ?EX_STACK(St)}}])
+                      [xmpp:pp(Packet), {E, {R, StackTrace}}])
     end.
 
 -spec route_iq(iq(), function()) -> ok.
index c72b58126056c40d1f855d6c401725bb28946719..8805c5da4dc64f0e199d2d473672bcbaeb4bf014 100644 (file)
@@ -90,8 +90,9 @@ start_link() ->
 route(Packet) ->
     try do_route(Packet)
     catch ?EX_RULE(E, R, St) ->
+           StackTrace = ?EX_STACK(St),
            ?ERROR_MSG("Failed to route packet:~n~s~nReason = ~p",
-                      [xmpp:pp(Packet), {E, {R, ?EX_STACK(St)}}])
+                      [xmpp:pp(Packet), {E, {R, StackTrace}}])
     end.
 
 -spec route(jid(), jid(), xmlel() | stanza()) -> ok.
index 2dd7e079081623afb747ef54019b5b4d6924de9f..a64288fd9b5986d719b5f49cf3970d64f6d70aa7 100644 (file)
@@ -122,10 +122,11 @@ row_to_route(Domain, {ServerHost, NodeS, PidS, LocalHintS} = Row) ->
     catch _:{bad_node, _} ->
            [];
          ?EX_RULE(E, R, St) ->
+           StackTrace = ?EX_STACK(St),
            ?ERROR_MSG("Failed to decode row from 'route' table:~n"
                       "Row = ~p~n"
                       "Domain = ~s~n"
                       "Reason = ~p",
-                      [Row, Domain, {E, {R, ?EX_STACK(St)}}]),
+                      [Row, Domain, {E, {R, StackTrace}}]),
            []
     end.
index 98adff4a106f7272cdc994d5e78a5973fe19ce83..c32f0156719d34a12f5d6cc46fd4af1808ecbde3 100644 (file)
@@ -91,8 +91,9 @@ start_link() ->
 route(Packet) ->
     try do_route(Packet)
     catch ?EX_RULE(E, R, St) ->
+           StackTrace = ?EX_STACK(St),
             ?ERROR_MSG("Failed to route packet:~n~s~nReason = ~p",
-                       [xmpp:pp(Packet), {E, {R, ?EX_STACK(St)}}])
+                       [xmpp:pp(Packet), {E, {R, StackTrace}}])
     end.
 
 clean_temporarily_blocked_table() ->
index 47900e48fd7f561ac307bcb8ca1d2ea9c2db8809..b4f7a6e4031a5b6c0806e7c36a9a86754e15a0b5 100644 (file)
@@ -141,9 +141,10 @@ route(Packet) ->
        Packet1 ->
            try do_route(Packet1), ok
            catch ?EX_RULE(E, R, St) ->
+                   StackTrace = ?EX_STACK(St),
                    ?ERROR_MSG("Failed to route packet:~n~s~nReason = ~p",
                               [xmpp:pp(Packet1),
-                               {E, {R, ?EX_STACK(St)}}])
+                               {E, {R, StackTrace}}])
            end
     end.
 
index 6ebf023e76368c8a2c13c898931f984018c7a1c8..3620f94208d6d3c4c99abfe9552ad77e623cc7ea 100644 (file)
@@ -535,12 +535,13 @@ outer_transaction(F, NRestarts, _Reason) ->
             put(?NESTING_KEY, ?TOP_LEVEL_TXN),
            outer_transaction(F, NRestarts - 1, Reason);
        ?EX_RULE(throw, {aborted, Reason}, Stack) when NRestarts =:= 0 ->
+           StackTrace = ?EX_STACK(Stack),
            ?ERROR_MSG("SQL transaction restarts exceeded~n** "
                       "Restarts: ~p~n** Last abort reason: "
                       "~p~n** Stacktrace: ~p~n** When State "
                       "== ~p",
                       [?MAX_TRANSACTION_RESTARTS, Reason,
-                       ?EX_STACK(Stack), get(?STATE_KEY)]),
+                       StackTrace, get(?STATE_KEY)]),
            sql_query_internal([<<"rollback;">>]),
            {aborted, Reason};
        ?EX_RULE(exit, Reason, _) ->
@@ -612,8 +613,9 @@ sql_query_internal(#sql_query{} = Query) ->
              exit:{normal, _} ->
                {error, <<"terminated unexpectedly">>};
              ?EX_RULE(Class, Reason, Stack) ->
+               StackTrace = ?EX_STACK(Stack),
                 ?ERROR_MSG("Internal error while processing SQL query: ~p",
-                           [{Class, Reason, ?EX_STACK(Stack)}]),
+                           [{Class, Reason, StackTrace}]),
                 {error, <<"internal error">>}
         end,
     check_error(Res, Query);
@@ -753,10 +755,11 @@ sql_query_format_res({selected, _, Rows}, SQLQuery) ->
                       [(SQLQuery#sql_query.format_res)(Row)]
                   catch
                      ?EX_RULE(Class, Reason, Stack) ->
+                         StackTrace = ?EX_STACK(Stack),
                           ?ERROR_MSG("Error while processing "
                                      "SQL query result: ~p~n"
                                      "row: ~p",
-                                     [{Class, Reason, ?EX_STACK(Stack)}, Row]),
+                                     [{Class, Reason, StackTrace}, Row]),
                           []
                   end
           end, Rows),
index 87fb62c06ca7c517e5f5e752fd1deca7f8dcba67..c00ecefe3d5dfde531a326762bf1469347b6c7ec 100644 (file)
@@ -112,8 +112,9 @@ process_iq(_Host, Module, Function, IQ) ->
        ignore ->
            ok
     catch ?EX_RULE(E, R, St) ->
+           StackTrace = ?EX_STACK(St),
            ?ERROR_MSG("Failed to process iq:~n~s~nReason = ~p",
-                      [xmpp:pp(IQ), {E, {R, ?EX_STACK(St)}}]),
+                      [xmpp:pp(IQ), {E, {R, StackTrace}}]),
            Txt = ?T("Module failed to handle the query"),
            Err = xmpp:err_internal_server_error(Txt, IQ#iq.lang),
            ejabberd_router:route_error(IQ, Err)
index 4dd48158a36efb5416e6065ed52f42343a85cfad..fbbdb648d467a27e4dd7aa06b24a2f42cdd03049 100644 (file)
@@ -192,7 +192,8 @@ process([Call], #request{method = 'POST', data = Data, ip = IPPort} = Req) ->
            ?DEBUG("Bad Request: ~p", [_Err]),
            badrequest_response(<<"Invalid JSON input">>);
        ?EX_RULE(_Class, _Error, Stack) ->
-            ?DEBUG("Bad Request: ~p ~p", [_Error, ?EX_STACK(Stack)]),
+           StackTrace = ?EX_STACK(Stack),
+            ?DEBUG("Bad Request: ~p ~p", [_Error, StackTrace]),
             badrequest_response()
     end;
 process([Call], #request{method = 'GET', q = Data, ip = {IP, _}} = Req) ->
@@ -209,7 +210,8 @@ process([Call], #request{method = 'GET', q = Data, ip = {IP, _}} = Req) ->
         throw:{error, unknown_command} ->
             json_format({404, 44, <<"Command not found.">>});
         ?EX_RULE(_, _Error, Stack) ->
-            ?DEBUG("Bad Request: ~p ~p", [_Error, ?EX_STACK(Stack)]),
+           StackTrace = ?EX_STACK(Stack),
+            ?DEBUG("Bad Request: ~p ~p", [_Error, StackTrace]),
             badrequest_response()
     end;
 process([_Call], #request{method = 'OPTIONS', data = <<>>}) ->
@@ -296,10 +298,11 @@ 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)};
          ?EX_RULE(Class, Error, Stack) ->
+           StackTrace = ?EX_STACK(Stack),
            ?ERROR_MSG("REST API Error: "
                       "~s(~p) -> ~p:~p ~p",
                       [Call, hide_sensitive_args(Args),
-                       Class, Error, ?EX_STACK(Stack)]),
+                       Class, Error, StackTrace]),
            {500, <<"internal_error">>}
     end.
 
index 11b72d932b32183baae57508fec84d44ef21e519..f3c8fdbb31b5e10870042cf96a07609a7bbaa1e0 100644 (file)
@@ -746,8 +746,9 @@ terminate(Reason, _StateName,
        end,
        mod_muc:room_destroyed(Host, Room, self(), LServer)
     catch ?EX_RULE(E, R, St) ->
-       mod_muc:room_destroyed(Host, Room, self(), LServer),
-       ?ERROR_MSG("Got exception on room termination: ~p", [{E, {R, ?EX_STACK(St)}}])
+           StackTrace = ?EX_STACK(St),
+           mod_muc:room_destroyed(Host, Room, self(), LServer),
+           ?ERROR_MSG("Got exception on room termination: ~p", [{E, {R, StackTrace}}])
     end,
     ok.
 
@@ -2782,15 +2783,16 @@ process_item_change(Item, SD, UJID) ->
                SD1
        end
     catch ?EX_RULE(E, R, St) ->
-               FromSuffix = case UJID of
-                       #jid{} ->
-                               JidString = jid:encode(UJID),
-                               <<" from ", JidString/binary>>;
-                       undefined ->
-                               <<"">>
-               end,
-               ?ERROR_MSG("Failed to set item ~p~s: ~p",
-                      [Item, FromSuffix, {E, {R, ?EX_STACK(St)}}]),
+           StackTrace = ?EX_STACK(St),
+           FromSuffix = case UJID of
+                            #jid{} ->
+                                JidString = jid:encode(UJID),
+                                <<" from ", JidString/binary>>;
+                            undefined ->
+                                <<"">>
+                        end,
+           ?ERROR_MSG("Failed to set item ~p~s: ~p",
+                      [Item, FromSuffix, {E, {R, StackTrace}}]),
            {error, xmpp:err_internal_server_error()}
     end.
 
index ea56aeede038eb8fe6221343e808409c3f0b8802..e3adce046f7617d993bebad87a2848f393159cee 100644 (file)
@@ -321,8 +321,9 @@ process_iq_get(#iq{to = To, lang = Lang,
                                 ver = Version}
           end)
     catch ?EX_RULE(E, R, St) ->
+           StackTrace = ?EX_STACK(St),
            ?ERROR_MSG("Failed to process roster get for ~s: ~p",
-                      [jid:encode(To), {E, {R, ?EX_STACK(St)}}]),
+                      [jid:encode(To), {E, {R, StackTrace}}]),
            Txt = ?T("Roster module has failed"),
            xmpp:make_error(IQ, xmpp:err_internal_server_error(Txt, Lang))
     end.