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

View File

@ -25,6 +25,12 @@
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
start(_Type, _Args) -> 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(), print_banner(),
ekka:start(), ekka:start(),
{ok, Sup} = emqx_sup:start_link(), {ok, Sup} = emqx_sup:start_link(),

View File

@ -25,6 +25,9 @@
-export([add_metadata_peername/1, add_metadata_client_id/1]). -export([add_metadata_peername/1, add_metadata_client_id/1]).
-export([add_proc_metadata/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) -> debug(Msg) ->
logger:debug(Msg). logger:debug(Msg).
debug(Format, Args) -> debug(Format, Args) ->
@ -73,4 +76,41 @@ add_proc_metadata(Meta) ->
logger:set_process_metadata(Meta); logger:set_process_metadata(Meta);
OldMeta -> OldMeta ->
logger:set_process_metadata(maps:merge(OldMeta, Meta)) logger:set_process_metadata(maps:merge(OldMeta, Meta))
end. 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}.