Shawn 7 лет назад
Родитель
Сommit
2bd0f16884
1 измененных файлов с 15 добавлено и 24 удалено
  1. 15 24
      src/emqx_tracer.erl

+ 15 - 24
src/emqx_tracer.erl

@@ -20,12 +20,12 @@
 
 -export([start_link/0]).
 -export([trace/2]).
--export([start_trace/2, lookup_traces/0, stop_trace/1]).
+-export([start_trace/3, lookup_traces/0, stop_trace/1]).
 
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
          code_change/3]).
 
--record(state, {level, org_top_level, traces}).
+-record(state, {traces}).
 
 -type(trace_who() :: {client_id | topic, binary()}).
 
@@ -37,7 +37,9 @@
                           [{peername,
                               [client_id,"@",peername," "],
                               [client_id, " "]}],
-                          []},
+                          [{peername,
+                              [peername," "],
+                              []}]},
                        msg,"\n"]}}).
 
 -spec(start_link() -> {ok, pid()} | ignore | {error, term()}).
@@ -56,11 +58,11 @@ trace(publish, #message{from = From, topic = Topic, payload = Payload})
 %%------------------------------------------------------------------------------
 
 %% @doc Start to trace client_id or topic.
--spec(start_trace(trace_who(), string()) -> ok | {error, term()}).
-start_trace({client_id, ClientId}, LogFile) ->
-    start_trace({start_trace, {client_id, ClientId}, LogFile});
-start_trace({topic, Topic}, LogFile) ->
-    start_trace({start_trace, {topic, Topic}, LogFile}).
+-spec(start_trace(trace_who(), logger:level(), string()) -> ok | {error, term()}).
+start_trace({client_id, ClientId}, Level, LogFile) ->
+    start_trace({start_trace, {client_id, ClientId}, Level, LogFile});
+start_trace({topic, Topic}, Level, LogFile) ->
+    start_trace({start_trace, {topic, Topic}, Level, LogFile}).
 
 start_trace(Req) -> gen_server:call(?MODULE, Req, infinity).
 
@@ -81,29 +83,26 @@ lookup_traces() ->
 %%------------------------------------------------------------------------------
 
 init([]) ->
-    {ok, #state{level = emqx_config:get_env(trace_level, debug),
-                org_top_level = get_top_level(),
-                traces = #{}}}.
+    {ok, #state{traces = #{}}}.
 
-handle_call({start_trace, Who, LogFile}, _From, State = #state{level = Level, traces = Traces}) ->
+handle_call({start_trace, Who, Level, LogFile}, _From, State = #state{traces = Traces}) ->
     case logger:add_handler(handler_id(Who), logger_disk_log_h,
                                 #{level => Level,
                                   formatter => ?FORMAT,
-                                  filesync_repeat_interval => 1000,
+                                  filesync_repeat_interval => no_repeat,
                                   config => #{type => halt, file => LogFile},
                                   filter_default => stop,
                                   filters => [{meta_key_filter,
                                                {fun filter_by_meta_key/2, Who} }]}) of
         ok ->
-            set_top_level(all), % open the top logger level to 'all'
             emqx_logger:info("[Tracer] start trace for ~p", [Who]),
-            {reply, ok, State#state{traces = maps:put(Who, LogFile, Traces)}};
+            {reply, ok, State#state{traces = maps:put(Who, {Level, LogFile}, Traces)}};
         {error, Reason} ->
             emqx_logger:error("[Tracer] start trace for ~p failed, error: ~p", [Who, Reason]),
             {reply, {error, Reason}, State}
     end;
 
-handle_call({stop_trace, Who}, _From, State = #state{org_top_level = OrgTopLevel, traces = Traces}) ->
+handle_call({stop_trace, Who}, _From, State = #state{traces = Traces}) ->
     case maps:find(Who, Traces) of
         {ok, _LogFile} ->
             case logger:remove_handler(handler_id(Who)) of
@@ -112,7 +111,6 @@ handle_call({stop_trace, Who}, _From, State = #state{org_top_level = OrgTopLevel
                 {error, Reason} ->
                     emqx_logger:error("[Tracer] stop trace for ~p failed, error: ~p", [Who, Reason])
             end,
-            set_top_level(OrgTopLevel), % reset the top logger level to original value
             {reply, ok, State#state{traces = maps:remove(Who, Traces)}};
         error ->
             {reply, {error, not_found}, State}
@@ -144,13 +142,6 @@ handler_id({topic, Topic}) ->
 handler_id({client_id, ClientId}) ->
     list_to_atom("clientid_" ++ binary_to_list(ClientId)).
 
-get_top_level() ->
-    #{level := OrgTopLevel} = logger:get_primary_config(),
-    OrgTopLevel.
-
-set_top_level(Level) ->
-    logger:set_primary_config(level, Level).
-
 filter_by_meta_key(#{meta:=Meta}=LogEvent, {MetaKey, MetaValue}) ->
     case maps:find(MetaKey, Meta) of
         {ok, MetaValue} -> LogEvent;