SisMaker 4 роки тому
джерело
коміт
28ba5cfb76
1 змінених файлів з 35 додано та 36 видалено
  1. +35
    -36
      src/eRum.erl

+ 35
- 36
src/eRum.erl Переглянути файл

@ -86,21 +86,21 @@ start() ->
stop() ->
application:stop(eRum).
%% @doc Manually log a message into lager without using the parse transform.
%% @doc Manually log a message into eRum without using the parse transform.
-spec log(rumAtomLevel(), pid() | atom() | [tuple(), ...], list()) -> ok | {error, lager_not_running}.
log(Level, Pid, Message) when is_pid(Pid); is_atom(Pid) ->
dispatch_log(Level, [{pid, Pid}], Message, [], ?RumDefTruncation);
log(Level, Metadata, Message) when is_list(Metadata) ->
dispatch_log(Level, Metadata, Message, [], ?RumDefTruncation).
%% @doc Manually log a message into lager without using the parse transform.
%% @doc Manually log a message into eRum without using the parse transform.
-spec log(rumAtomLevel(), pid() | atom() | [tuple(), ...], string(), list()) -> ok | {error, lager_not_running}.
log(Level, Pid, Format, Args) when is_pid(Pid); is_atom(Pid) ->
dispatch_log(Level, [{pid, Pid}], Format, Args, ?RumDefTruncation);
log(Level, Metadata, Format, Args) when is_list(Metadata) ->
dispatch_log(Level, Metadata, Format, Args, ?RumDefTruncation).
%% @doc Manually log a message into lager without using the parse transform.
%% @doc Manually log a message into eRum without using the parse transform.
-spec log(atom(), rumAtomLevel(), pid() | atom() | [tuple(), ...], string(), list()) -> ok | {error, lager_not_running}.
log(Sink, Level, Pid, Format, Args) when is_pid(Pid); is_atom(Pid) ->
dispatch_log(Sink, Level, [{pid, Pid}], Format, Args, ?RumDefTruncation, safe);
@ -110,14 +110,9 @@ log(Sink, Level, Metadata, Format, Args) when is_list(Metadata) ->
log_unsafe(Level, Metadata, Format, Args) when is_list(Metadata) ->
dispatch_log(?RumDefSink, Level, Metadata, Format, Args, ?RumDefTruncation, unsafe).
%% backwards compatible with beams compiled with lager 2.x
do_log(Severity, Metadata, Format, Args, Size, SeverityAsInt, LevelThreshold, TraceFilters, SinkPid) ->
do_log(Severity, Metadata, Format, Args, Size, SeverityAsInt,
LevelThreshold, TraceFilters, ?RumDefSink, SinkPid).
-spec dispatch_log(atom(), rumAtomLevel(), list(), string(), list() | none, pos_integer(), safe | unsafe) -> ok | {error, lager_not_running} | {error, {sink_not_configured, atom()}}.
%% this is the same check that the parse transform bakes into the module at compile time
%% see lager_transform (lines 173-216)
%% see rumTransform (lines 173-216)
dispatch_log(Sink, Severity, Metadata, Format, Args, Size, Safety) when is_atom(Severity) ->
SeverityAsInt = rumUtil:levelToNum(Severity),
case {whereis(Sink), whereis(?RumDefSink), rumConfig:get({Sink, loglevel}, {?LOG_NONE, []})} of
@ -130,6 +125,10 @@ dispatch_log(Sink, Severity, Metadata, Format, Args, Size, Safety) when is_atom(
_ -> ok
end.
%% 使eRum 2.x编译的梁
do_log(Severity, Metadata, Format, Args, Size, SeverityAsInt, LevelThreshold, TraceFilters, SinkPid) ->
do_log(Severity, Metadata, Format, Args, Size, SeverityAsInt, LevelThreshold, TraceFilters, ?RumDefSink, SinkPid).
%% @private Should only be called externally from code generated from the parse transform
do_log(Severity, Metadata, Format, Args, Size, SeverityAsInt, LevelThreshold, TraceFilters, Sink, SinkPid) when is_atom(Severity) ->
FormatFun = fun() -> safe_format_chop(Format, Args, Size) end,
@ -156,13 +155,13 @@ do_log_impl(Severity, Metadata, Format, Args, SeverityAsInt, LevelThreshold, Tra
Severity, Metadata, Destinations),
case rumConfig:get({Sink, async}, false) of
true ->
gen_event:notify(SinkPid, {mWriteLog, LagerMsg});
gen_emm:info_notify(SinkPid, {mWriteLog, LagerMsg});
false ->
gen_event:sync_notify(SinkPid, {mWriteLog, LagerMsg})
gen_emm:call_notify(SinkPid, {mWriteLog, LagerMsg})
end,
case TraceSinkPid /= undefined of
true ->
gen_event:notify(TraceSinkPid, {mWriteLog, LagerMsg});
gen_emm:info_notify(TraceSinkPid, {mWriteLog, LagerMsg});
false ->
ok
end;
@ -234,10 +233,11 @@ setLogLevel(Handler, Ident, Level) when is_atom(Level) ->
%% @doc Set the loglevel for a particular sink's backend that potentially has
%% multiple identifiers. (Use `undefined' if it doesn't have any.)
setLogLevel(Sink, Handler, Ident, Level) when is_atom(Level) ->
HandlerArg = case Ident of
undefined -> Handler;
_ -> {Handler, Ident}
end,
HandlerArg =
case Ident of
undefined -> Handler;
_ -> {Handler, Ident}
end,
Reply = gen_emm:call(Sink, HandlerArg, {mSetLogLevel, Level}, infinity),
updateLogevelCfg(Sink),
Reply.
@ -268,21 +268,21 @@ setLogHwm(Handler, Hwm) when is_integer(Hwm) ->
%% @doc Set the loghwm for a particular backend.
setLogHwm(Sink, Handler, Hwm) when is_integer(Hwm) ->
gen_event:call(Sink, Handler, {mSetLogHwm, Hwm}, infinity).
gen_emm:call(Sink, Handler, {mSetLogHwm, Hwm}, infinity).
%% @doc Set the loghwm (log high water mark) for file backends with multiple identifiers
setLogHwm(Sink, Handler, Ident, Hwm) when is_integer(Hwm) ->
gen_event:call(Sink, {Handler, Ident}, {mSetLogHwm, Hwm}, infinity).
gen_emm:call(Sink, {Handler, Ident}, {mSetLogHwm, Hwm}, infinity).
%% @doc Print stacktrace in human readable form
pr_stacktrace(Stacktrace) ->
Stacktrace1 =
case application:get_env(lager, reverse_pretty_stacktrace, true) of
true ->
lists:reverse(Stacktrace);
_ ->
Stacktrace
end,
case rumUtil:get_env(reverse_pretty_stacktrace, true) of
true ->
lists:reverse(Stacktrace);
_ ->
Stacktrace
end,
pr_stacktrace_(Stacktrace1).
pr_stacktrace_(Stacktrace) ->
@ -295,7 +295,7 @@ pr_stacktrace_(Stacktrace) ->
Stacktrace).
pr_stacktrace(Stacktrace, {Class, Reason}) ->
case application:get_env(lager, reverse_pretty_stacktrace, true) of
case rumUtil:get_env(reverse_pretty_stacktrace, true) of
true ->
lists:flatten(
pr_stacktrace_(lists:reverse(Stacktrace)) ++ "\n" ++ io_lib:format("~s:~p", [Class, Reason]));
@ -344,7 +344,7 @@ trace_file(File, Filter, Options) when is_list(Options) ->
trace_file(File, Filter, Level, Options) ->
FileName = rumUtil:parsePath(File),
case validate_trace_filters(Filter, Level, {lager_file_backend, FileName}) of
case validate_trace_filters(Filter, Level, {rumBkdFile, FileName}) of
{Sink, {ok, Trace}} ->
Handlers = rumConfig:global_get(handlers, []),
%% check if this file backend is already installed
@ -359,7 +359,7 @@ trace_file(File, Filter, Level, Options) ->
{file, FileName}),
{level, none}),
HandlerInfo =
eRum_app:startHandler(Sink, {lager_file_backend, FileName}, LogFileConfig),
eRum_app:startHandler(Sink, {rumBkdFile, FileName}, LogFileConfig),
rumConfig:global_set(handlers, [HandlerInfo | Handlers]),
{ok, installed};
{_Watcher, _Handler, Sink} ->
@ -370,7 +370,7 @@ trace_file(File, Filter, Level, Options) ->
case Res of
{ok, _} ->
add_trace_to_loglevel_config(Trace, Sink),
{ok, {{lager_file_backend, FileName}, Filter, Level}};
{ok, {{rumBkdFile, FileName}, Filter, Level}};
{error, _} = E ->
E
end;
@ -382,12 +382,12 @@ trace_console(Filter) ->
trace_console(Filter, debug).
trace_console(Filter, Level) ->
trace(lager_console_backend, Filter, Level).
trace(rumBkdConsole, Filter, Level).
trace(Backend, Filter) ->
trace(Backend, Filter, debug).
trace({lager_file_backend, File}, Filter, Level) ->
trace({rumBkdFile, File}, Filter, Level) ->
trace_file(File, Filter, Level);
trace(Backend, Filter, Level) ->
@ -430,7 +430,7 @@ stop_trace_int({_Filter, _Level, Backend} = Trace, Sink) ->
%% check no other traces point here
case lists:keyfind(Backend, 3, NewTraces) of
false ->
gen_event:delete_handler(Sink, Backend, []),
gen_emm:delEpm(Sink, Backend, []),
rumConfig:global_set(handlers,
lists:keydelete(Backend, 1,
rumConfig:global_get(handlers)));
@ -488,7 +488,7 @@ clear_all_traces() ->
fun({Handler, _Watcher, Sink}) ->
case getLogLevel(Sink, Handler) of
none ->
gen_event:delete_handler(Sink, Handler, []),
gen_emm:delEpm(Sink, Handler, []),
false;
_ ->
true
@ -548,9 +548,9 @@ status() ->
get_sink_handler_status(Sink, Handler, Level) ->
case Handler of
{lager_file_backend, File} ->
{rumBkdFile, File} ->
io_lib:format("File ~ts (~s) at level ~p\n", [File, Sink, Level]);
lager_console_backend ->
rumBkdConsole ->
io_lib:format("Console (~s) at level ~p\n", [Sink, Level]);
_ ->
[]
@ -693,7 +693,6 @@ is_record_known(Record, Module) ->
end.
%% @private
trace_func(#trace_func_state_v1{pid = Pid, level = Level, format_string = Fmt} = FuncState, Event, ProcState) ->
_ = eRum:log(Level, Pid, Fmt, [Event, ProcState]),
@ -739,7 +738,7 @@ get_sink_handler_status_unicode_test() ->
validate_status(File).
validate_status(File) ->
Handler = {lager_file_backend, File},
Handler = {rumBkdFile, File},
Status = get_sink_handler_status(?RumDefSink, Handler, debug),
?assertNotEqual(nomatch, string:find(Status, File)).
-endif.

Завантаження…
Відмінити
Зберегти