From 1cfab9fed52d3ed30d1ef8f0b4e40cb4a08db2f0 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jan 2022 09:53:43 +0800 Subject: [PATCH 1/5] chore(log): add more detail log for authz/authn query error --- .../src/simple_authn/emqx_authn_jwks_connector.erl | 4 +++- apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl | 3 ++- apps/emqx_authn/src/simple_authn/emqx_authn_mongodb.erl | 4 ++++ apps/emqx_authn/src/simple_authn/emqx_authn_mysql.erl | 3 +++ apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl | 2 ++ apps/emqx_authn/src/simple_authn/emqx_authn_redis.erl | 7 +++++++ apps/emqx_authz/src/emqx_authz_mongodb.erl | 2 ++ apps/emqx_authz/src/emqx_authz_mysql.erl | 5 ++++- apps/emqx_authz/src/emqx_authz_postgresql.erl | 8 +++++--- apps/emqx_authz/src/emqx_authz_redis.erl | 1 + 10 files changed, 33 insertions(+), 6 deletions(-) diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_jwks_connector.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_jwks_connector.erl index fa7eaa7a5..c8526c73c 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_jwks_connector.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_jwks_connector.erl @@ -101,7 +101,7 @@ handle_info({http, {RequestID, Result}}, endpoint => Endpoint, reason => Reason}), State1; - {_StatusLine, _Headers, Body} -> + {StatusLine, Headers, Body} -> try JWKS = jose_jwk:from(emqx_json:decode(Body, [return_maps])), {_, JWKs} = JWKS#jose_jwk.keys, @@ -109,6 +109,8 @@ handle_info({http, {RequestID, Result}}, catch _:_ -> ?SLOG(warning, #{msg => "invalid_jwks_returned", endpoint => Endpoint, + status => StatusLine, + headers => Headers, body => Body}), State1 end diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl index c383db841..7291abf29 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl @@ -18,6 +18,7 @@ -include("emqx_authn.hrl"). -include_lib("typerefl/include/types.hrl"). +-include_lib("emqx/include/logger.hrl"). -behaviour(hocon_schema). -behaviour(emqx_authentication). @@ -272,7 +273,7 @@ verify(JWS, [JWK | More], VerifyClaims) -> verify(JWS, More, VerifyClaims) catch _:_Reason:_Stacktrace -> - %% TODO: Add log + ?TRACE("JWT", "authn_jwt_invalid_signature", #{jwk => JWK, jws => JWS}), {error, invalid_signature} end. diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_mongodb.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_mongodb.erl index cf5ab5a65..6e01fb7b9 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_mongodb.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_mongodb.erl @@ -143,6 +143,8 @@ authenticate(#{password := Password} = Credential, {error, Reason} -> ?SLOG(error, #{msg => "mongodb_query_failed", resource => ResourceId, + collection => Collection, + selector => Selector2, reason => Reason}), ignore; Doc -> @@ -152,6 +154,8 @@ authenticate(#{password := Password} = Credential, {error, {cannot_find_password_hash_field, PasswordHashField}} -> ?SLOG(error, #{msg => "cannot_find_password_hash_field", resource => ResourceId, + collection => Collection, + selector => Selector2, password_hash_field => PasswordHashField}), ignore; {error, Reason} -> diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_mysql.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_mysql.erl index fbda7ce61..53cf72066 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_mysql.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_mysql.erl @@ -123,6 +123,9 @@ authenticate(#{password := Password} = Credential, {error, Reason} -> ?SLOG(error, #{msg => "mysql_query_failed", resource => ResourceId, + query => Query, + params => Params, + timeout => Timeout, reason => Reason}), ignore end. diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl index 6589fc8eb..0bcca0ef6 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl @@ -119,6 +119,8 @@ authenticate(#{password := Password} = Credential, {error, Reason} -> ?SLOG(error, #{msg => "postgresql_query_failed", resource => ResourceId, + query => Query, + params => Params, reason => Reason}), ignore end. diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_redis.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_redis.erl index 76cebc06e..8471ad8d1 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_redis.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_redis.erl @@ -125,6 +125,7 @@ authenticate(#{password := Password} = Credential, password_hash_algorithm := Algorithm}) -> NKey = binary_to_list(iolist_to_binary(replace_placeholders(Key, Credential))), case emqx_resource:query(ResourceId, {cmd, [Command, NKey | Fields]}) of + {ok, []} -> ignore; {ok, Values} -> case merge(Fields, Values) of #{<<"password_hash">> := _} = Selected -> @@ -137,12 +138,18 @@ authenticate(#{password := Password} = Credential, end; _ -> ?SLOG(error, #{msg => "cannot_find_password_hash_field", + cmd => Command, + keys => NKey, + fields => Fields, resource => ResourceId}), ignore end; {error, Reason} -> ?SLOG(error, #{msg => "redis_query_failed", resource => ResourceId, + cmd => Command, + keys => NKey, + fields => Fields, reason => Reason}), ignore end. diff --git a/apps/emqx_authz/src/emqx_authz_mongodb.erl b/apps/emqx_authz/src/emqx_authz_mongodb.erl index 496593896..c1b9c907a 100644 --- a/apps/emqx_authz/src/emqx_authz_mongodb.erl +++ b/apps/emqx_authz/src/emqx_authz_mongodb.erl @@ -67,6 +67,8 @@ authorize(Client, PubSub, Topic, {error, Reason} -> ?SLOG(error, #{msg => "query_mongo_error", reason => Reason, + collection => Collection, + selector => RenderedSelector, resource_id => ResourceID}), nomatch; [] -> nomatch; diff --git a/apps/emqx_authz/src/emqx_authz_mysql.erl b/apps/emqx_authz/src/emqx_authz_mysql.erl index 276073749..cb11a70fd 100644 --- a/apps/emqx_authz/src/emqx_authz_mysql.erl +++ b/apps/emqx_authz/src/emqx_authz_mysql.erl @@ -58,13 +58,16 @@ authorize(Client, PubSub, Topic, query := {Query, Params} } }) -> - case emqx_resource:query(ResourceID, {sql, Query, replvar(Params, Client)}) of + RenderParams = replvar(Params, Client), + case emqx_resource:query(ResourceID, {sql, Query, RenderParams}) of {ok, _Columns, []} -> nomatch; {ok, Columns, Rows} -> do_authorize(Client, PubSub, Topic, Columns, Rows); {error, Reason} -> ?SLOG(error, #{ msg => "query_mysql_error" , reason => Reason + , query => Query + , params => RenderParams , resource_id => ResourceID}), nomatch end. diff --git a/apps/emqx_authz/src/emqx_authz_postgresql.erl b/apps/emqx_authz/src/emqx_authz_postgresql.erl index cfd58c53f..4c2415a4e 100644 --- a/apps/emqx_authz/src/emqx_authz_postgresql.erl +++ b/apps/emqx_authz/src/emqx_authz_postgresql.erl @@ -62,8 +62,8 @@ dry_run(Source) -> parse_query(Sql) -> case re:run(Sql, ?RE_PLACEHOLDER, [global, {capture, all, list}]) of - {match, Capured} -> - PlaceHolders = [PlaceHolder || [PlaceHolder] <- Capured], + {match, Captured} -> + PlaceHolders = [PlaceHolder || [PlaceHolder] <- Captured], Replacements = ["$" ++ integer_to_list(I) || I <- lists:seq(1, length(PlaceHolders))], NSql = lists:foldl( fun({PlaceHolder, Replacement}, S) -> @@ -80,13 +80,15 @@ authorize(Client, PubSub, Topic, placeholders := Placeholders } }) -> - case emqx_resource:query(ResourceID, {prepared_query, ResourceID, replvar(Placeholders, Client)}) of + RenderedParams = replvar(Placeholders, Client), + case emqx_resource:query(ResourceID, {prepared_query, ResourceID, RenderedParams}) of {ok, _Columns, []} -> nomatch; {ok, Columns, Rows} -> do_authorize(Client, PubSub, Topic, Columns, Rows); {error, Reason} -> ?SLOG(error, #{ msg => "query_postgresql_error" , reason => Reason + , params => RenderedParams , resource_id => ResourceID}), nomatch end. diff --git a/apps/emqx_authz/src/emqx_authz_redis.erl b/apps/emqx_authz/src/emqx_authz_redis.erl index 69940e537..a1c0faf95 100644 --- a/apps/emqx_authz/src/emqx_authz_redis.erl +++ b/apps/emqx_authz/src/emqx_authz_redis.erl @@ -63,6 +63,7 @@ authorize(Client, PubSub, Topic, {error, Reason} -> ?SLOG(error, #{ msg => "query_redis_error" , reason => Reason + , cmd => NCMD , resource_id => ResourceID}), nomatch end. From dc6c49d7f513f585199308c48f9034ea1284d45c Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jan 2022 10:16:11 +0800 Subject: [PATCH 2/5] chore(trace): always ?SLOG when ?TRACE --- apps/emqx/include/logger.hrl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/emqx/include/logger.hrl b/apps/emqx/include/logger.hrl index b7e2caa6e..1341dcf8d 100644 --- a/apps/emqx/include/logger.hrl +++ b/apps/emqx/include/logger.hrl @@ -83,7 +83,8 @@ [] -> ok; List -> emqx_trace:log(List, Event, Msg, Meta) - end + end, + ?SLOG(debug, Meta#{msg => Msg}) end). %% print to 'user' group leader From 9727eb514dd9fd6cff17cd678760c49a3dab5f4a Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Thu, 13 Jan 2022 11:53:56 +0800 Subject: [PATCH 3/5] feat(trace): improve debug msg format --- apps/emqx/include/logger.hrl | 4 ++- apps/emqx/src/emqx_trace/emqx_trace.erl | 2 +- .../src/emqx_trace/emqx_trace_formatter.erl | 35 +++++++++++++------ .../src/emqx_trace/emqx_trace_handler.erl | 3 ++ 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/apps/emqx/include/logger.hrl b/apps/emqx/include/logger.hrl index 1341dcf8d..a975cbd38 100644 --- a/apps/emqx/include/logger.hrl +++ b/apps/emqx/include/logger.hrl @@ -76,6 +76,7 @@ -define(TRACE_FILTER, emqx_trace_filter). %% Only evaluate when necessary +%% Always debug the trace events. -define(TRACE(Event, Msg, Meta), begin case persistent_term:get(?TRACE_FILTER, undefined) of @@ -84,7 +85,8 @@ List -> emqx_trace:log(List, Event, Msg, Meta) end, - ?SLOG(debug, Meta#{msg => Msg}) + ?SLOG(debug, (emqx_trace_formatter:format_meta(Meta))#{msg => Msg, trace_event => Event}, + #{trace_filter => ignore}) end). %% print to 'user' group leader diff --git a/apps/emqx/src/emqx_trace/emqx_trace.erl b/apps/emqx/src/emqx_trace/emqx_trace.erl index 51eea43e8..ac52bc246 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace.erl @@ -100,7 +100,7 @@ log(List, Event, Msg, Meta0) -> undefined -> Meta0; ProcMeta -> maps:merge(ProcMeta, Meta0) end, - Log = #{level => trace, event => Event, meta => Meta, msg => Msg}, + Log = #{level => debug, trace_event => Event, meta => Meta, msg => Msg}, log_filter(List, Log). log_filter([], _Log) -> ok; diff --git a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl index 8538a25f8..147b13825 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl @@ -16,13 +16,14 @@ -module(emqx_trace_formatter). -export([format/2]). +-export([format_meta/1]). %%%----------------------------------------------------------------- %%% API -spec format(LogEvent, Config) -> unicode:chardata() when LogEvent :: logger:log_event(), Config :: logger:config(). -format(#{level := trace, event := Event, meta := Meta, msg := Msg}, +format(#{level := debug, trace_event := Event, meta := Meta, msg := Msg}, #{payload_encode := PEncode}) -> Time = calendar:system_time_to_rfc3339(erlang:system_time(second)), ClientId = to_iolist(maps:get(clientid, Meta, "")), @@ -33,22 +34,36 @@ format(#{level := trace, event := Event, meta := Meta, msg := Msg}, format(Event, Config) -> emqx_logger_textfmt:format(Event, Config). +format_meta(Meta) -> + Encode = emqx_trace_handler:payload_encode(), + format_meta_(Meta, Encode). + format_meta(Meta0, Encode) -> - Packet = format_packet(maps:get(packet, Meta0, undefined), Encode), - Payload = format_payload(maps:get(payload, Meta0, undefined), Encode), - Meta1 = maps:without([msg, clientid, peername, packet, payload], Meta0), - case Meta1 =:= #{} of + Meta1 = #{packet := Packet0, payload := Payload0} = format_meta_(Meta0, Encode), + Packet = enrich(", packet: ", Packet0), + Payload = enrich(", payload: ", Payload0), + Meta2 = maps:without([msg, clientid, peername, packet, payload], Meta1), + case Meta2 =:= #{} of true -> [Packet, Payload]; - false -> [Packet, ", ", map_to_iolist(Meta1), Payload] + false -> [Packet, ", ", map_to_iolist(Meta2), Payload] end. +enrich(_, "") -> ""; +enrich(Key, Bin) -> [Key, Bin]. + +format_meta_(Meta, Encode) -> + Meta#{ + packet => format_packet(maps:get(packet, Meta, undefined), Encode), + payload => format_payload(maps:get(payload, Meta, undefined), Encode) + }. + format_packet(undefined, _) -> ""; -format_packet(Packet, Encode) -> [", packet: ", emqx_packet:format(Packet, Encode)]. +format_packet(Packet, Encode) -> emqx_packet:format(Packet, Encode). format_payload(undefined, _) -> ""; -format_payload(Payload, text) -> [", payload: ", io_lib:format("~ts", [Payload])]; -format_payload(Payload, hex) -> [", payload(hex): ", emqx_packet:encode_hex(Payload)]; -format_payload(_, hidden) -> ", payload=******". +format_payload(Payload, text) -> io_lib:format("~ts", [Payload]); +format_payload(Payload, hex) -> emqx_packet:encode_hex(Payload); +format_payload(_, hidden) -> "******". to_iolist(Atom) when is_atom(Atom) -> atom_to_list(Atom); to_iolist(Int) when is_integer(Int) -> integer_to_list(Int); diff --git a/apps/emqx/src/emqx_trace/emqx_trace_handler.erl b/apps/emqx/src/emqx_trace/emqx_trace_handler.erl index 2bef3d7d9..676026448 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace_handler.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace_handler.erl @@ -120,10 +120,12 @@ running() -> lists:foldl(fun filter_traces/2, [], emqx_logger:get_log_handlers(started)). -spec filter_clientid(logger:log_event(), {binary(), atom()}) -> logger:log_event() | stop. +filter_clientid(#{level := debug, meta := #{trace_filter := _}}, _) -> stop; filter_clientid(#{meta := #{clientid := ClientId}} = Log, {ClientId, _Name}) -> Log; filter_clientid(_Log, _ExpectId) -> stop. -spec filter_topic(logger:log_event(), {binary(), atom()}) -> logger:log_event() | stop. +filter_topic(#{level := debug, meta := #{trace_filter := _}}, _) -> stop; filter_topic(#{meta := #{topic := Topic}} = Log, {TopicFilter, _Name}) -> case emqx_topic:match(Topic, TopicFilter) of true -> Log; @@ -132,6 +134,7 @@ filter_topic(#{meta := #{topic := Topic}} = Log, {TopicFilter, _Name}) -> filter_topic(_Log, _ExpectId) -> stop. -spec filter_ip_address(logger:log_event(), {string(), atom()}) -> logger:log_event() | stop. +filter_ip_address(#{level := debug, meta := #{trace_filter := _}}, _) -> stop; filter_ip_address(#{meta := #{peername := Peername}} = Log, {IP, _Name}) -> case lists:prefix(IP, Peername) of true -> Log; From 681ab6b754c0a7fde9b7acc2a48d8dc45a71c18c Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 14 Jan 2022 10:17:02 +0800 Subject: [PATCH 4/5] fix(review): refactor function name base on review sugguestion --- apps/emqx/include/logger.hrl | 6 +++--- apps/emqx/src/emqx_trace/emqx_trace.erl | 6 +++--- apps/emqx/src/emqx_trace/emqx_trace_formatter.erl | 14 +++++++------- .../emqx_authn/src/simple_authn/emqx_authn_jwt.erl | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/emqx/include/logger.hrl b/apps/emqx/include/logger.hrl index a975cbd38..595957f17 100644 --- a/apps/emqx/include/logger.hrl +++ b/apps/emqx/include/logger.hrl @@ -77,15 +77,15 @@ %% Only evaluate when necessary %% Always debug the trace events. --define(TRACE(Event, Msg, Meta), +-define(TRACE(Tag, Msg, Meta), begin case persistent_term:get(?TRACE_FILTER, undefined) of undefined -> ok; [] -> ok; List -> - emqx_trace:log(List, Event, Msg, Meta) + emqx_trace:log(List, Msg, Meta#{trace_tag => Tag}) end, - ?SLOG(debug, (emqx_trace_formatter:format_meta(Meta))#{msg => Msg, trace_event => Event}, + ?SLOG(debug, (emqx_trace_formatter:format_meta(Meta))#{msg => Msg, trace_tag => Tag}, #{trace_filter => ignore}) end). diff --git a/apps/emqx/src/emqx_trace/emqx_trace.erl b/apps/emqx/src/emqx_trace/emqx_trace.erl index ac52bc246..9a1c8701a 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace.erl @@ -27,7 +27,7 @@ -export([ publish/1 , subscribe/3 , unsubscribe/2 - , log/4 + , log/3 ]). -export([ start_link/0 @@ -94,13 +94,13 @@ unsubscribe(<<"$SYS/", _/binary>>, _SubOpts) -> ignore; unsubscribe(Topic, SubOpts) -> ?TRACE("UNSUBSCRIBE", "unsubscribe", #{topic => Topic, sub_opts => SubOpts}). -log(List, Event, Msg, Meta0) -> +log(List, Msg, Meta0) -> Meta = case logger:get_process_metadata() of undefined -> Meta0; ProcMeta -> maps:merge(ProcMeta, Meta0) end, - Log = #{level => debug, trace_event => Event, meta => Meta, msg => Msg}, + Log = #{level => debug, meta => Meta, msg => Msg}, log_filter(List, Log). log_filter([], _Log) -> ok; diff --git a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl index 147b13825..b1640e621 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl @@ -23,35 +23,35 @@ -spec format(LogEvent, Config) -> unicode:chardata() when LogEvent :: logger:log_event(), Config :: logger:config(). -format(#{level := debug, trace_event := Event, meta := Meta, msg := Msg}, +format(#{level := debug, meta := Meta = #{trace_tag := Tag}, msg := Msg}, #{payload_encode := PEncode}) -> Time = calendar:system_time_to_rfc3339(erlang:system_time(second)), ClientId = to_iolist(maps:get(clientid, Meta, "")), Peername = maps:get(peername, Meta, ""), MetaBin = format_meta(Meta, PEncode), - [Time, " [", Event, "] ", ClientId, "@", Peername, " msg: ", Msg, MetaBin, "\n"]; + [Time, " [", Tag, "] ", ClientId, "@", Peername, " msg: ", Msg, MetaBin, "\n"]; format(Event, Config) -> emqx_logger_textfmt:format(Event, Config). format_meta(Meta) -> Encode = emqx_trace_handler:payload_encode(), - format_meta_(Meta, Encode). + do_format_meta(Meta, Encode). format_meta(Meta0, Encode) -> - Meta1 = #{packet := Packet0, payload := Payload0} = format_meta_(Meta0, Encode), + Meta1 = #{packet := Packet0, payload := Payload0} = do_format_meta(Meta0, Encode), Packet = enrich(", packet: ", Packet0), Payload = enrich(", payload: ", Payload0), - Meta2 = maps:without([msg, clientid, peername, packet, payload], Meta1), + Meta2 = maps:without([msg, clientid, peername, packet, payload, trace_tag], Meta1), case Meta2 =:= #{} of true -> [Packet, Payload]; false -> [Packet, ", ", map_to_iolist(Meta2), Payload] end. enrich(_, "") -> ""; -enrich(Key, Bin) -> [Key, Bin]. +enrich(Key, IoData) -> [Key, IoData]. -format_meta_(Meta, Encode) -> +do_format_meta(Meta, Encode) -> Meta#{ packet => format_packet(maps:get(packet, Meta, undefined), Encode), payload => format_payload(maps:get(payload, Meta, undefined), Encode) diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl index 7291abf29..d6f0b153e 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl @@ -272,7 +272,7 @@ verify(JWS, [JWK | More], VerifyClaims) -> {false, _, _} -> verify(JWS, More, VerifyClaims) catch - _:_Reason:_Stacktrace -> + _:_Reason -> ?TRACE("JWT", "authn_jwt_invalid_signature", #{jwk => JWK, jws => JWS}), {error, invalid_signature} end. From 8b31466538d17cdd57b4386791af881e1f18dbc5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 14 Jan 2022 15:01:04 +0800 Subject: [PATCH 5/5] chore(trace): replace trace_filter by is_trace --- apps/emqx/include/logger.hrl | 7 ++--- .../src/emqx_trace/emqx_trace_handler.erl | 28 +++++++++---------- .../src/simple_authn/emqx_authn_pgsql.erl | 1 - 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/apps/emqx/include/logger.hrl b/apps/emqx/include/logger.hrl index 595957f17..496675005 100644 --- a/apps/emqx/include/logger.hrl +++ b/apps/emqx/include/logger.hrl @@ -82,11 +82,10 @@ case persistent_term:get(?TRACE_FILTER, undefined) of undefined -> ok; [] -> ok; - List -> - emqx_trace:log(List, Msg, Meta#{trace_tag => Tag}) + List -> emqx_trace:log(List, Msg, Meta#{trace_tag => Tag}) end, - ?SLOG(debug, (emqx_trace_formatter:format_meta(Meta))#{msg => Msg, trace_tag => Tag}, - #{trace_filter => ignore}) + ?SLOG(debug, (emqx_trace_formatter:format_meta(Meta))#{msg => Msg, tag => Tag}, + #{is_trace => false}) end). %% print to 'user' group leader diff --git a/apps/emqx/src/emqx_trace/emqx_trace_handler.erl b/apps/emqx/src/emqx_trace/emqx_trace_handler.erl index 676026448..df7d1059e 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace_handler.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace_handler.erl @@ -120,28 +120,28 @@ running() -> lists:foldl(fun filter_traces/2, [], emqx_logger:get_log_handlers(started)). -spec filter_clientid(logger:log_event(), {binary(), atom()}) -> logger:log_event() | stop. -filter_clientid(#{level := debug, meta := #{trace_filter := _}}, _) -> stop; -filter_clientid(#{meta := #{clientid := ClientId}} = Log, {ClientId, _Name}) -> Log; +filter_clientid(#{meta := Meta = #{clientid := ClientId}} = Log, {MatchId, _Name}) -> + filter_ret(ClientId =:= MatchId andalso is_trace(Meta), Log); filter_clientid(_Log, _ExpectId) -> stop. -spec filter_topic(logger:log_event(), {binary(), atom()}) -> logger:log_event() | stop. -filter_topic(#{level := debug, meta := #{trace_filter := _}}, _) -> stop; -filter_topic(#{meta := #{topic := Topic}} = Log, {TopicFilter, _Name}) -> - case emqx_topic:match(Topic, TopicFilter) of - true -> Log; - false -> stop - end; +filter_topic(#{meta := Meta = #{topic := Topic}} = Log, {TopicFilter, _Name}) -> + filter_ret(is_trace(Meta) andalso emqx_topic:match(Topic, TopicFilter), Log); filter_topic(_Log, _ExpectId) -> stop. -spec filter_ip_address(logger:log_event(), {string(), atom()}) -> logger:log_event() | stop. -filter_ip_address(#{level := debug, meta := #{trace_filter := _}}, _) -> stop; -filter_ip_address(#{meta := #{peername := Peername}} = Log, {IP, _Name}) -> - case lists:prefix(IP, Peername) of - true -> Log; - false -> stop - end; +filter_ip_address(#{meta := Meta = #{peername := Peername}} = Log, {IP, _Name}) -> + filter_ret(is_trace(Meta) andalso lists:prefix(IP, Peername), Log); filter_ip_address(_Log, _ExpectId) -> stop. +-compile({inline, [is_trace/1, filter_ret/2]}). +%% TRUE when is_trace is missing. +is_trace(#{is_trace := false}) -> false; +is_trace(_) -> true. + +filter_ret(true, Log) -> Log; +filter_ret(false, _Log) -> stop. + filters(#{type := clientid, filter := Filter, name := Name}) -> [{clientid, {fun ?MODULE:filter_clientid/2, {Filter, Name}}}]; filters(#{type := topic, filter := Filter, name := Name}) -> diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl index 0bcca0ef6..2724f4152 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_pgsql.erl @@ -119,7 +119,6 @@ authenticate(#{password := Password} = Credential, {error, Reason} -> ?SLOG(error, #{msg => "postgresql_query_failed", resource => ResourceId, - query => Query, params => Params, reason => Reason}), ignore