Преглед изворни кода

Update proc meta-data for empty clientid (#1980)

Shawn пре 7 година
родитељ
комит
eeb0cab3e3
6 измењених фајлова са 13 додато и 19 уклоњено
  1. 0 1
      include/logger.hrl
  2. 1 1
      src/emqx_connection.erl
  3. 8 14
      src/emqx_logger.erl
  4. 2 1
      src/emqx_protocol.erl
  5. 1 1
      src/emqx_session.erl
  6. 1 1
      src/emqx_ws_connection.erl

+ 0 - 1
include/logger.hrl

@@ -4,7 +4,6 @@
 %%--------------------------------------------------------------------
 -ifdef(LOG_HEADER).
 %% with header
-
 -define(LOG(Level, Format, Args),
         begin
           (logger:log(Level,#{},#{report_cb =>

+ 1 - 1
src/emqx_connection.erl

@@ -153,7 +153,7 @@ init([Transport, RawSocket, Options]) ->
             ok = emqx_gc:init(GcPolicy),
             ok = emqx_misc:init_proc_mng_policy(Zone),
 
-            emqx_logger:add_metadata_peername(esockd_net:format(Peername)),
+            emqx_logger:set_metadata_peername(esockd_net:format(Peername)),
             gen_server:enter_loop(?MODULE, [{hibernate_after, IdleTimout}],
                                   State, self(), IdleTimout);
         {error, Reason} ->

+ 8 - 14
src/emqx_logger.erl

@@ -22,8 +22,8 @@
 -export([error/1, error/2, error/3]).
 -export([critical/1, critical/2, critical/3]).
 
--export([add_metadata_peername/1, add_metadata_client_id/1]).
--export([add_proc_metadata/1]).
+-export([set_metadata_peername/1, set_metadata_client_id/1]).
+-export([set_proc_metadata/1]).
 
 -export([get_primary_log_level/0, set_primary_log_level/1]).
 -export([get_log_handlers/0, get_log_handler/1, set_log_handler_level/2]).
@@ -63,20 +63,14 @@ critical(Format, Args) ->
 critical(Metadata, Format, Args) when is_map(Metadata) ->
     logger:critical(Format, Args, Metadata).
 
+set_metadata_client_id(ClientId) ->
+    set_proc_metadata(#{client_id => ClientId}).
 
-add_metadata_client_id(ClientId) ->
-    add_proc_metadata(#{client_id => ClientId}).
+set_metadata_peername(Peername) ->
+    set_proc_metadata(#{peername => Peername}).
 
-add_metadata_peername(Peername) ->
-    add_proc_metadata(#{peername => Peername}).
-
-add_proc_metadata(Meta) ->
-    case logger:get_process_metadata() of
-        undefined ->
-            logger:set_process_metadata(Meta);
-        OldMeta ->
-            logger:set_process_metadata(maps:merge(OldMeta, Meta))
-    end.
+set_proc_metadata(Meta) ->
+    logger:update_process_metadata(Meta).
 
 get_primary_log_level() ->
     #{level := Level} = logger:get_primary_config(),

+ 2 - 1
src/emqx_protocol.erl

@@ -292,7 +292,7 @@ process_packet(?CONNECT_PACKET(
 
     NewClientId = maybe_use_username_as_clientid(ClientId, Username, PState),
 
-    emqx_logger:add_metadata_client_id(NewClientId),
+    emqx_logger:set_metadata_client_id(NewClientId),
 
     %% TODO: Mountpoint...
     %% Msg -> emqx_mountpoint:mount(MountPoint, Msg)
@@ -315,6 +315,7 @@ process_packet(?CONNECT_PACKET(
                   {ok, IsSuper} ->
                       %% Maybe assign a clientId
                       PState3 = maybe_assign_client_id(PState2#pstate{is_super = IsSuper}),
+                      emqx_logger:set_metadata_client_id(PState3#pstate.client_id),
                       %% Open session
                       case try_open_session(PState3) of
                           {ok, SPid, SP} ->

+ 1 - 1
src/emqx_session.erl

@@ -343,7 +343,7 @@ init([Parent, #{zone                := Zone,
                 max_inflight        := MaxInflight,
                 topic_alias_maximum := TopicAliasMaximum,
                 will_msg            := WillMsg}]) ->
-    emqx_logger:add_proc_metadata(#{client_id => ClientId}),
+    emqx_logger:set_metadata_client_id(ClientId),
     process_flag(trap_exit, true),
     true = link(ConnPid),
     IdleTimout = get_env(Zone, idle_timeout, 30000),

+ 1 - 1
src/emqx_ws_connection.erl

@@ -136,7 +136,7 @@ websocket_init(#state{request = Req, options = Options}) ->
     IdleTimout = emqx_zone:get_env(Zone, idle_timeout, 30000),
     lists:foreach(fun(Stat) -> put(Stat, 0) end, ?SOCK_STATS),
 
-    emqx_logger:add_metadata_peername(esockd_net:format(Peername)),
+    emqx_logger:set_metadata_peername(esockd_net:format(Peername)),
     {ok, #state{peername     = Peername,
                 sockname     = Sockname,
                 parser_state = ParserState,