Add CLI for log level (#1977)

This commit is contained in:
Shawn 2018-11-23 11:04:33 +08:00 committed by turtleDeng
parent 2bd0f16884
commit 6fa183f847
3 changed files with 60 additions and 5 deletions

View File

@ -387,7 +387,12 @@ end}.
{datatype, {enum, [off, file, console, both]}}
]}.
{mapping, "log.level", "kernel.logger_level", [
{mapping, "log.level", "kernel.logger", [
{default, error},
{datatype, {enum, [debug, info, notice, warning, error, critical, alert, emergency, all]}}
]}.
{mapping, "log.primary_level", "emqx.primary_log_level", [
{default, error},
{datatype, {enum, [debug, info, notice, warning, error, critical, alert, emergency, all]}}
]}.
@ -427,9 +432,13 @@ end}.
hidden
]}.
{translation, "emqx.primary_log_level", fun(Conf) ->
cuttlefish:conf_get("log.level", Conf)
end}.
{translation, "kernel.logger", fun(Conf) ->
LogTo = cuttlefish:conf_get("log.to", Conf),
TopLogLevel = cuttlefish:conf_get("log.level", Conf),
LogLevel = cuttlefish:conf_get("log.level", Conf),
Formatter = {emqx_logger_formatter,
#{template =>
[time," [",level,"] ",
@ -452,7 +461,7 @@ end}.
DefaultHandler =
if LogTo =:= console orelse LogTo =:= both ->
[{handler, default, logger_std_h,
#{level => TopLogLevel,
#{level => LogLevel,
config => #{type => standard_io},
formatter => Formatter}}];
true ->
@ -463,7 +472,7 @@ end}.
FileHandler =
if LogTo =:= file orelse LogTo =:= both ->
[{handler, file, logger_disk_log_h,
#{level => TopLogLevel,
#{level => LogLevel,
config => FileConf(cuttlefish:conf_get("log.file", Conf)),
formatter => Formatter,
filesync_repeat_interval => no_repeat}}];

View File

@ -25,6 +25,12 @@
%%--------------------------------------------------------------------
start(_Type, _Args) ->
%% We'd like to configure the primary logger level here, rather than set the
%% kernel config `logger_level` before starting the erlang vm.
%% This is because the latter approach an annoying debug msg will be printed out:
%% "[debug] got_unexpected_message {'EXIT',<0.1198.0>,normal}"
logger:set_primary_config(level, application:get_env(emqx, primary_log_level, error)),
print_banner(),
ekka:start(),
{ok, Sup} = emqx_sup:start_link(),

View File

@ -25,6 +25,9 @@
-export([add_metadata_peername/1, add_metadata_client_id/1]).
-export([add_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]).
debug(Msg) ->
logger:debug(Msg).
debug(Format, Args) ->
@ -74,3 +77,40 @@ add_proc_metadata(Meta) ->
OldMeta ->
logger:set_process_metadata(maps:merge(OldMeta, Meta))
end.
get_primary_log_level() ->
#{level := Level} = logger:get_primary_config(),
Level.
set_primary_log_level(Level) ->
logger:set_primary_config(level, Level).
get_log_handlers() ->
lists:map(fun log_hanlder_info/1, logger:get_handler_config()).
get_log_handler(HandlerId) ->
{ok, Conf} = logger:get_handler_config(HandlerId),
log_hanlder_info(Conf).
set_log_handler_level(HandlerId, Level) ->
logger:set_handler_config(HandlerId, level, Level).
%%========================
%% Internal Functions
%%========================
log_hanlder_info(#{id := Id, level := Level, module := logger_std_h,
config := #{type := Type}}) when Type =:= standard_io;
Type =:= standard_error ->
{Id, Level, console};
log_hanlder_info(#{id := Id, level := Level, module := logger_std_h,
config := #{type := Type}}) ->
case Type of
{file, Filename} -> {Id, Level, Filename};
{file, Filename, _Opts} -> {Id, Level, Filename};
_ -> {Id, Level, unknown}
end;
log_hanlder_info(#{id := Id, level := Level, module := logger_disk_log_h,
config := #{file := Filename}}) ->
{Id, Level, Filename};
log_hanlder_info(#{id := Id, level := Level, module := _OtherModule}) ->
{Id, Level, unknown}.