Kaynağa Gözat

feat: allow enable/disable an existing logger file handler

Zaiming (Stone) Shi 3 yıl önce
ebeveyn
işleme
4bc8f0d44b

+ 1 - 0
apps/emqx_conf/etc/emqx_conf.conf

@@ -544,6 +544,7 @@ log {
   ##----------------------------------------------------------------
   ## file_handlers.<name>
   file_handlers.default {
+    enable = true
     ## The log level filter of this handler
     ## All the log messages with levels lower than this level will
     ## be dropped.

+ 16 - 9
apps/emqx_conf/src/emqx_conf_schema.erl

@@ -586,11 +586,7 @@ fields("log") ->
     ];
 
 fields("console_handler") ->
-    [ {"enable",
-       sc(boolean(),
-          #{ default => false
-           })}
-    ] ++ log_handler_common_confs();
+    log_handler_common_confs();
 
 fields("log_file_handler") ->
     [ {"file",
@@ -704,13 +700,21 @@ tr_cluster_discovery(Conf) ->
 tr_logger_level(Conf) ->
     ConsoleLevel = conf_get("log.console_handler.level", Conf, undefined),
     FileLevels = [conf_get("level", SubConf) || {_, SubConf}
-                    <- maps:to_list(conf_get("log.file_handlers", Conf, #{}))],
+                    <- logger_file_handlers(Conf)],
     case FileLevels ++ [ConsoleLevel || ConsoleLevel =/= undefined] of
         [] -> warning; %% warning is the default level we should use
         Levels ->
             least_severe_log_level(Levels)
     end.
 
+logger_file_handlers(Conf) ->
+    Handlers = maps:to_list(conf_get("log.file_handlers", Conf, #{})),
+    lists:filter(fun({_Name, Opts}) ->
+                         B = conf_get("enable", Opts),
+                         true = is_boolean(B),
+                         B
+                 end, Handlers).
+
 tr_logger(Conf) ->
     %% For the default logger that outputs to console
     ConsoleHandler =
@@ -743,12 +747,15 @@ tr_logger(Conf) ->
                 filters => log_filter(SubConf),
                 filesync_repeat_interval => no_repeat
             }}
-        end || {HandlerName, SubConf} <- maps:to_list(conf_get("log.file_handlers", Conf, #{}))],
-
+        end || {HandlerName, SubConf} <- logger_file_handlers(Conf)],
     [{handler, default, undefined}] ++ ConsoleHandler ++ FileHandlers.
 
 log_handler_common_confs() ->
-    [ {"level",
+    [ {"enable",
+       sc(boolean(),
+          #{ default => false
+           })}
+    , {"level",
        sc(log_level(),
           #{ default => warning
            , desc => "Global log level. This includes the primary log level "