浏览代码

ft: 代码修改

master
SisMaker 4 年前
父节点
当前提交
83135cdf94
共有 12 个文件被更改,包括 330 次插入252 次删除
  1. +57
    -0
      eRum.sample.config
  2. +27
    -28
      include/eRum.hrl
  3. +1
    -1
      rebar.config
  4. +2
    -2
      src/backend/rumBackendFile.erl
  5. +13
    -16
      src/eRum.erl
  6. +5
    -12
      src/eRum_app.erl
  7. +2
    -2
      src/formatter/rumFormatter.erl
  8. +7
    -14
      src/misc/rumMsg.erl
  9. +162
    -123
      src/misc/rumUtil.erl
  10. +1
    -1
      src/transform/rumTransform.erl
  11. +52
    -52
      test/lager_test_backend.erl
  12. +1
    -1
      test/lager_test_function_transform.erl

+ 57
- 0
eRum.sample.config 查看文件

@ -0,0 +1,57 @@
[
{eRum, [
%% 是否开启颜色
{colored, false},
%% 颜色码配置
{colors, [
{debug, "\e[0;38m"},
{info, "\e[1;37m"},
{notice, "\e[1;36m"},
{warning, "\e[1;33m"},
{error, "\e[1;31m"},
{critical, "\e[1;35m"},
{alert, "\e[1;44m"},
{emergency, "\e[1;41m"}
]},
%% crash log cfg
%% 有效值 string | false
%% 为 false 的时候 没有 crash logger.
{crash_log, "log/crash.log"},
%% Maximum size in bytes of events in the crash log - defaults to 65536
{crash_log_msg_size, 65536},
%% Maximum size of the crash log in bytes, before its rotated, set to 0 to disable rotation - default is 0
{crash_log_size, 10485760},
%% What time to rotate the crash log - default is no time rotation. See the README for a description of this format.
{crash_log_date, "$D0"},
%% Number of rotated crash logs to keep, 0 means keep only the current one - default is 0
{crash_log_count, 5},
%% Crash Log Rotator Module - default is lager_rotator_default
{crash_log_rotator, lager_rotator_default},
%% Whether to redirect error_logger messages into the default lager_event sink - defaults to true
{error_logger_redirect, true},
%% How many messages per second to allow from error_logger before we start dropping them
{error_logger_hwm, 50},
%% How big the gen_event mailbox can get before it is
%% switched into sync mode. This value only applies to
%% the default sink; extra sinks can supply their own.
{async_threshold, 20},
%% Switch back to async mode, when gen_event mailbox size
%% decrease from `async_threshold' to async_threshold -
%% async_threshold_window. This value only applies to the
%% default sink; extra sinks can supply their own.
{async_threshold_window, 5}
]}
].

+ 27
- 28
include/eRum.hrl 查看文件

@ -1,8 +1,27 @@
%%
-define(RumAppName, eRum).
%%
-define(RumDefTruncation, 4096).
-define(RumDefTracer, lager_default_tracer).
-define(RumDefSink, rumEvent).
-define(RumErrLogSink, error_logger_lager_event).
%% Key
-define(RumPdLogNames, rumPdLogNames).
-define(RumBackendThrottle, rumBackendThrottle).
%%
-define(DEFAULT_HANDLER_CONF,
[
{lager_console_backend, [{level, info}]},
{lager_file_backend, [{file, "log/error.log"}, {level, error}, {size, 10485760}, {date, "$D0"}, {count, 5}]},
{lager_file_backend, [{file, "log/console.log"}, {level, info}, {size, 10485760}, {date, "$D0"}, {count, 5}]}
]).
%%
-define(RumMetadata(Extras), [
{severity, info},
{pid, self()},
@ -14,13 +33,17 @@
{line, ?LINE} | Extras
]).
-define(RumAppName, eRum).
-type rumLevel() :: none | debug | info | notice | warning | error | critical | alert | emergency.
-type rumLevelNum() :: 0..256.
%%
-define(RumLevels, [debug, info, notice, warning, error, critical, alert, emergency, none]).
%% 使
-define(RumLevelsUnsafe, [{debug_unsafe, debug}, {info_unsafe, info}, {notice_unsafe, notice}, {warning_unsafe, warning}, {error_unsafe, error}, {critical_unsafe, critical}, {alert_unsafe, alert}, {emergency_unsafe, emergency}]).
%%
-define(DEBUG, 128).
-define(INFO, 64).
-define(NOTICE, 32).
@ -31,33 +54,9 @@
-define(EMERGENCY, 1).
-define(LOG_NONE, 0).
-define(RumLevelToNum(Level),
case Level of
debug -> ?DEBUG;
info -> ?INFO;
notice -> ?NOTICE;
warning -> ?WARNING;
error -> ?ERROR;
critical -> ?CRITICAL;
alert -> ?ALERT;
emergency -> ?EMERGENCY
end).
-define(RumNumToLevel(Num),
case Num of
?DEBUG -> debug;
?INFO -> info;
?NOTICE -> notice;
?WARNING -> warning;
?ERROR -> error;
?CRITICAL -> critical;
?ALERT -> alert;
?EMERGENCY -> emergency
end).
-define(RunShouldLog(Sink, Level), (rumUtil:level_to_num(Level) band element(1, rumConfig:get({Sink, loglevel}, {?LOG_NONE, []}))) /= 0).
-define(RunShouldLog(Sink, Level), (rumUtil:levelToNum(Level) band element(1, rumConfig:get({Sink, loglevel}, {?LOG_NONE, []}))) /= 0).
-define(RunShouldLog(Level), (rumUtil:level_to_num(Level) band element(1, rumConfig:get(loglevel, {?LOG_NONE, []}))) /= 0).
-define(RunShouldLog(Level), (rumUtil:levelToNum(Level) band element(1, rumConfig:get(loglevel, {?LOG_NONE, []}))) /= 0).
-define(RunNotify(Level, Pid, Format, Args),
gen_event:notify(rumEvent, {log, rumMsg:new(io_lib:format(Format, Args), Level, [{pid, Pid}, {line, ?LINE}, {file, ?FILE}, {module, ?MODULE}], [])})).
@ -154,7 +153,7 @@
-record(rumMsg, {
destinations :: list(),
metadata :: [tuple()],
severity :: eRum:log_level(),
severity :: rumLevel(),
datetime :: {string(), string()},
timestamp :: erlang:timestamp(),
message :: list()

+ 1
- 1
rebar.config 查看文件

@ -29,7 +29,7 @@
]}.
{deps, [
{eGbh, ".*", {git, "http://192.168.0.88:53000/SisMaker/eGbh.git", {branch, "master"}}},
{eGbh, ".*", {git, "http://47.108.26.175:53000/SisMaker/eGbh.git", {branch, "master"}}},
{goldrush, "0.1.9"}
]}.

+ 2
- 2
src/backend/rumBackendFile.erl 查看文件

@ -61,14 +61,14 @@
os_type :: atom()
}).
-type option() :: {file, string()} | {level, eRum:log_level()} |
-type option() :: {file, string()} | {level, rumLevel()} |
{size, non_neg_integer()} | {date, string()} |
{count, non_neg_integer()} | {rotator, atom()} |
{high_water_mark, non_neg_integer()} |
{flush_queue, boolean()} |
{flush_threshold, non_neg_integer()} |
{sync_interval, non_neg_integer()} |
{sync_size, non_neg_integer()} | {sync_on, eRum:log_level()} |
{sync_size, non_neg_integer()} | {sync_on, rumLevel()} |
{check_interval, non_neg_integer()} | {formatter, atom()} |
{formatter_config, term()}.

+ 13
- 16
src/eRum.erl 查看文件

@ -42,14 +42,11 @@
safe_format/3, safe_format_chop/3, unsafe_format/2, dispatch_log/5, dispatch_log/7, dispatch_log/9,
do_log/9, do_log/10, do_log_unsafe/10, pr/2, pr/3, pr_stacktrace/1, pr_stacktrace/2]).
-type log_level() :: none | debug | info | notice | warning | error | critical | alert | emergency.
-type log_level_number() :: 0..7.
-export_type([log_level/0, log_level_number/0]).
-record(trace_func_state_v1, {
pid :: undefined | pid(),
level :: log_level(),
level :: rumLevel(),
count :: infinity | pos_integer(),
format_string :: string(),
timeout :: infinity | pos_integer(),
@ -59,11 +56,11 @@
%% API
%% @doc installs a lager trace handler into the target process (using sys:install) at the specified level.
-spec install_trace(pid(), log_level()) -> ok.
-spec install_trace(pid(), rumLevel()) -> ok.
install_trace(Pid, Level) ->
install_trace(Pid, Level, []).
-spec install_trace(pid(), log_level(), [{count, infinity | pos_integer()} | {format_string, string()} | {timeout, timeout()}]) -> ok.
-spec install_trace(pid(), rumLevel(), [{count, infinity | pos_integer()} | {format_string, string()} | {timeout, timeout()}]) -> ok.
install_trace(Pid, Level, Options) ->
sys:install(Pid, {fun ?MODULE:trace_func/3, trace_state(Pid, Level, Options)}).
@ -114,11 +111,11 @@ md(_) ->
erlang:error(badarg).
-spec dispatch_log(atom(), log_level(), list(), string(), list() | none, pos_integer(), safe | unsafe) -> ok | {error, lager_not_running} | {error, {sink_not_configured, atom()}}.
-spec dispatch_log(atom(), rumLevel(), 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)
dispatch_log(Sink, Severity, Metadata, Format, Args, Size, Safety) when is_atom(Severity) ->
SeverityAsInt = rumUtil:level_to_num(Severity),
SeverityAsInt = rumUtil:levelToNum(Severity),
case {whereis(Sink), whereis(?RumDefSink), rumConfig:get({Sink, loglevel}, {?LOG_NONE, []})} of
{undefined, undefined, _} -> {error, lager_not_running};
{undefined, _LagerEventPid0, _} -> {error, {sink_not_configured, Sink}};
@ -195,14 +192,14 @@ do_log(Severity, Metadata, Format, Args, Size, SeverityAsInt, LevelThreshold, Tr
%% along with a Sink param??
%% @doc Manually log a message into lager without using the parse transform.
-spec log(log_level(), pid() | atom() | [tuple(), ...], list()) -> ok | {error, lager_not_running}.
-spec log(rumLevel(), 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.
-spec log(log_level(), pid() | atom() | [tuple(), ...], string(), list()) -> ok | {error, lager_not_running}.
-spec log(rumLevel(), 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) ->
@ -213,7 +210,7 @@ log_unsafe(Level, Metadata, Format, Args) when is_list(Metadata) ->
%% @doc Manually log a message into lager without using the parse transform.
-spec log(atom(), log_level(), pid() | atom() | [tuple(), ...], string(), list()) -> ok | {error, lager_not_running}.
-spec log(atom(), rumLevel(), 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);
log(Sink, Level, Metadata, Format, Args) when is_list(Metadata) ->
@ -405,12 +402,12 @@ status() ->
[begin
LevelName = case Level of
{mask, Mask} ->
case rumUtil:mask_to_levels(Mask) of
case rumUtil:maskToLevels(Mask) of
[] -> none;
Levels -> hd(Levels)
end;
Num ->
rumUtil:num_to_level(Num)
rumUtil:numToLevel(Num)
end,
io_lib:format("Tracing messages matching ~p (sink ~s) at level ~p to ~p\n",
[Filter, Sink, LevelName, Destination])
@ -473,12 +470,12 @@ get_loglevel(Handler) ->
get_loglevel(Sink, Handler) ->
case gen_event:call(Sink, Handler, get_loglevel, infinity) of
{mask, Mask} ->
case rumUtil:mask_to_levels(Mask) of
case rumUtil:maskToLevels(Mask) of
[] -> none;
Levels -> hd(Levels)
end;
X when is_integer(X) ->
rumUtil:num_to_level(X);
rumUtil:numToLevel(X);
Y -> Y
end.
@ -536,7 +533,7 @@ minimum_loglevel(Levels) ->
lists:foldl(fun({mask, Mask}, Acc) ->
Mask bor Acc;
(Level, Acc) when is_integer(Level) ->
{mask, Mask} = rumUtil:config_to_mask(rumUtil:num_to_level(Level)),
{mask, Mask} = rumUtil:config_to_mask(rumUtil:numToLevel(Level)),
Mask bor Acc;
(_, Acc) ->
Acc

+ 5
- 12
src/eRum_app.erl 查看文件

@ -13,14 +13,7 @@
, configure_sink/2
]).
-define(FILENAMES, '__lager_file_backend_filenames').
-define(THROTTLE, rumBackendThrottle).
-define(DEFAULT_HANDLER_CONF,
[
{lager_console_backend, [{level, info}]},
{lager_file_backend, [{file, "log/error.log"}, {level, error}, {size, 10485760}, {date, "$D0"}, {count, 5}]},
{lager_file_backend, [{file, "log/console.log"}, {level, info}, {size, 10485760}, {date, "$D0"}, {count, 5}]}
]).
start() ->
application:ensure_all_started(eRum).
@ -89,7 +82,7 @@ determine_async_behavior(Sink, Threshold, Window) ->
startThrottle(Sink, Threshold, Window).
startThrottle(Sink, Threshold, Window) ->
_ = supervisor:start_child(rumHandlerWatcherSup, [Sink, ?THROTTLE, [Threshold, Window]]),
_ = supervisor:start_child(rumHandlerWatcherSup, [Sink, ?RumBackendThrottle, [Threshold, Window]]),
ok.
start_handlers(_Sink, undefined) ->
@ -118,7 +111,7 @@ start_handler(Sink, Module, Config) ->
check_handler_config({lager_file_backend, F}, Config) when is_list(Config); is_tuple(Config) ->
Fs =
case get(?FILENAMES) of
case get(?RumPdLogNames) of
undefined -> ordsets:new();
X -> X
end,
@ -128,7 +121,7 @@ check_handler_config({lager_file_backend, F}, Config) when is_list(Config); is_t
"Cannot have same file (~p) in multiple file backends~n", [F]),
throw({error, bad_config});
false ->
put(?FILENAMES,
put(?RumPdLogNames,
ordsets:add_element(F, Fs))
end,
ok;
@ -138,7 +131,7 @@ check_handler_config(Handler, _BadConfig) ->
throw({error, {bad_config, Handler}}).
clean_up_config_checks() ->
erase(?FILENAMES).
erase(?RumPdLogNames).
interpret_hwm(undefined) ->
undefined;

+ 2
- 2
src/formatter/rumFormatter.erl 查看文件

@ -74,7 +74,7 @@ output({blank, Fill}, _Msg) ->
Fill;
output(sev, Msg) ->
%% Write brief acronym for the severity level (e.g. debug -> $D)
[rumUtil:level_to_chr(rumMsg:severity(Msg))];
[rumUtil:levelToChr(rumMsg:severity(Msg))];
output(metadata, Msg) ->
output({metadata, "=", " "}, Msg);
output({metadata, IntSep, FieldSep}, Msg) ->
@ -121,7 +121,7 @@ output(severity, Msg, Width) ->
make_printable(atom_to_list(rumMsg:severity(Msg)), Width);
output(sev, Msg, _Width) ->
%% Write brief acronym for the severity level (e.g. debug -> $D)
[rumUtil:level_to_chr(rumMsg:severity(Msg))];
[rumUtil:levelToChr(rumMsg:severity(Msg))];
output(node, Msg, _Width) ->
output({node, atom_to_list(node())}, Msg, _Width);
output(blank, _Msg, _Width) ->

+ 7
- 14
src/misc/rumMsg.erl 查看文件

@ -1,5 +1,7 @@
-module(rumMsg).
-include("eRum.hrl").
-export([new/4, new/5]).
-export([message/1]).
-export([timestamp/1]).
@ -9,26 +11,17 @@
-export([metadata/1]).
-export([destinations/1]).
-record(rumMsg, {
destinations :: list(),
metadata :: [tuple()],
severity :: eRum:log_level(),
datetime :: {string(), string()},
timestamp :: erlang:timestamp(),
message :: list()
}).
-opaque rumMsg() :: #rumMsg{}.
-export_type([rumMsg/0]).
%% create with provided timestamp, handy for testing mostly
-spec new(list(), erlang:timestamp(), eRum:log_level(), [tuple()], list()) -> rumMsg().
-spec new(list(), erlang:timestamp(), rumLevel(), [tuple()], list()) -> rumMsg().
new(Msg, Timestamp, Severity, Metadata, Destinations) ->
{Date, Time} = rumUtil:format_time(rumUtil:maybe_utc(rumUtil:localtime_ms(Timestamp))),
#rumMsg{message = Msg, datetime = {Date, Time}, timestamp = Timestamp, severity = Severity,
metadata = Metadata, destinations = Destinations}.
-spec new(list(), eRum:log_level(), [tuple()], list()) -> rumMsg().
-spec new(list(), rumLevel(), [tuple()], list()) -> rumMsg().
new(Msg, Severity, Metadata, Destinations) ->
Now = os:timestamp(),
new(Msg, Now, Severity, Metadata, Destinations).
@ -45,13 +38,13 @@ timestamp(Msg) ->
datetime(Msg) ->
Msg#rumMsg.datetime.
-spec severity(rumMsg()) -> eRum:log_level().
-spec severity(rumMsg()) -> rumLevel().
severity(Msg) ->
Msg#rumMsg.severity.
-spec severity_as_int(rumMsg()) -> eRum:log_level_number().
-spec severity_as_int(rumMsg()) -> rumLevelNum().
severity_as_int(Msg) ->
rumUtil:level_to_num(Msg#rumMsg.severity).
rumUtil:levelToNum(Msg#rumMsg.severity).
-spec metadata(rumMsg()) -> [tuple()].
metadata(Msg) ->

+ 162
- 123
src/misc/rumUtil.erl 查看文件

@ -1,13 +1,18 @@
-module(rumUtil).
-include("eRum.hrl").
-include_lib("kernel/include/file.hrl").
-compile(export_all).
-export([
levels/0
, level_to_num/1
, level_to_chr/1
, num_to_level/1
, levelToNum/1
, levelToChr/1
, numToLevel/1
, config_to_mask/1
, config_to_levels/1
, mask_to_levels/1
, atomCfgToLevels/1
, maskToLevels/1
, format_time/0
, format_time/1
, localtime_ms/0
@ -31,115 +36,149 @@
]).
-ifdef(TEST).
-export([create_test_dir/0, get_test_dir/0, delete_test_dir/0,
set_dir_permissions/2,
safe_application_load/1,
safe_write_file/2]).
-export([
create_test_dir/0
, get_test_dir/0
, delete_test_dir/0
, set_dir_permissions/2
, safe_application_load/1
, safe_write_file/2
]).
-include_lib("eunit/include/eunit.hrl").
-endif.
-include("eRum.hrl").
-include_lib("kernel/include/file.hrl").
levels() ->
[debug, info, notice, warning, error, critical, alert, emergency, none].
level_to_num(debug) -> ?DEBUG;
level_to_num(info) -> ?INFO;
level_to_num(notice) -> ?NOTICE;
level_to_num(warning) -> ?WARNING;
level_to_num(error) -> ?ERROR;
level_to_num(critical) -> ?CRITICAL;
level_to_num(alert) -> ?ALERT;
level_to_num(emergency) -> ?EMERGENCY;
level_to_num(none) -> ?LOG_NONE.
level_to_chr(debug) -> $D;
level_to_chr(info) -> $I;
level_to_chr(notice) -> $N;
level_to_chr(warning) -> $W;
level_to_chr(error) -> $E;
level_to_chr(critical) -> $C;
level_to_chr(alert) -> $A;
level_to_chr(emergency) -> $M;
level_to_chr(none) -> $ .
num_to_level(?DEBUG) -> debug;
num_to_level(?INFO) -> info;
num_to_level(?NOTICE) -> notice;
num_to_level(?WARNING) -> warning;
num_to_level(?ERROR) -> error;
num_to_level(?CRITICAL) -> critical;
num_to_level(?ALERT) -> alert;
num_to_level(?EMERGENCY) -> emergency;
num_to_level(?LOG_NONE) -> none.
levelToNum(debug) -> ?DEBUG;
levelToNum(info) -> ?INFO;
levelToNum(notice) -> ?NOTICE;
levelToNum(warning) -> ?WARNING;
levelToNum(error) -> ?ERROR;
levelToNum(critical) -> ?CRITICAL;
levelToNum(alert) -> ?ALERT;
levelToNum(emergency) -> ?EMERGENCY;
levelToNum(none) -> ?LOG_NONE.
numToLevel(?DEBUG) -> debug;
numToLevel(?INFO) -> info;
numToLevel(?NOTICE) -> notice;
numToLevel(?WARNING) -> warning;
numToLevel(?ERROR) -> error;
numToLevel(?CRITICAL) -> critical;
numToLevel(?ALERT) -> alert;
numToLevel(?EMERGENCY) -> emergency;
numToLevel(?LOG_NONE) -> none.
levelToChr(debug) -> $D;
levelToChr(info) -> $I;
levelToChr(notice) -> $N;
levelToChr(warning) -> $W;
levelToChr(error) -> $E;
levelToChr(critical) -> $C;
levelToChr(alert) -> $A;
levelToChr(emergency) -> $M;
levelToChr(none) -> $ .
-spec config_to_mask(atom()|string()) -> {'mask', integer()}.
config_to_mask(Conf) ->
Levels = config_to_levels(Conf),
{mask, lists:foldl(fun(Level, Acc) ->
level_to_num(Level) bor Acc
end, 0, Levels)}.
Levels = atomCfgToLevels(Conf),
levelsToMask(Levels, 0).
levelsToMask([], Acc) ->
Acc;
levelsToMask([Level | Left], Acc) ->
levelsToMask(Left, levelToNum(Level) bor Acc).
-spec mask_to_levels(non_neg_integer()) -> [eRum:log_level()].
mask_to_levels(Mask) ->
mask_to_levels(Mask, levels(), []).
-spec maskToLevels(non_neg_integer()) -> [rumLevel()].
maskToLevels(Mask) ->
maskToLevels(?RumLevels, Mask, []).
mask_to_levels(_Mask, [], Acc) ->
maskToLevels([], _Mask, Acc) ->
lists:reverse(Acc);
mask_to_levels(Mask, [Level | Levels], Acc) ->
NewAcc = case (level_to_num(Level) band Mask) /= 0 of
true ->
[Level | Acc];
false ->
Acc
end,
mask_to_levels(Mask, Levels, NewAcc).
-spec config_to_levels(atom()|string()) -> [eRum:log_level()].
config_to_levels(Conf) when is_atom(Conf) ->
config_to_levels(atom_to_list(Conf));
config_to_levels([$! | Rest]) ->
levels() -- config_to_levels(Rest);
config_to_levels([$=, $< | Rest]) ->
[_ | Levels] = config_to_levels_int(Rest),
lists:filter(fun(E) -> not lists:member(E, Levels) end, levels());
config_to_levels([$<, $= | Rest]) ->
[_ | Levels] = config_to_levels_int(Rest),
lists:filter(fun(E) -> not lists:member(E, Levels) end, levels());
config_to_levels([$>, $= | Rest]) ->
config_to_levels_int(Rest);
config_to_levels([$=, $> | Rest]) ->
config_to_levels_int(Rest);
config_to_levels([$= | Rest]) ->
[level_to_atom(Rest)];
config_to_levels([$< | Rest]) ->
Levels = config_to_levels_int(Rest),
lists:filter(fun(E) -> not lists:member(E, Levels) end, levels());
config_to_levels([$> | Rest]) ->
[_ | Levels] = config_to_levels_int(Rest),
lists:filter(fun(E) -> lists:member(E, Levels) end, levels());
config_to_levels(Conf) ->
config_to_levels_int(Conf).
%% internal function to break the recursion loop
config_to_levels_int(Conf) ->
Level = level_to_atom(Conf),
lists:dropwhile(fun(E) -> E /= Level end, levels()).
level_to_atom(String) ->
Levels = levels(),
try list_to_existing_atom(String) of
Atom ->
case lists:member(Atom, Levels) of
true ->
Atom;
false ->
erlang:error(badarg)
end
catch
_:_ ->
maskToLevels([Level | Levels], Mask, Acc) ->
case (levelToNum(Level) band Mask) /= 0 of
true ->
maskToLevels(Levels, Mask, [Level | Acc]);
_ ->
maskToLevels(Levels, Mask, Acc)
end.
-spec atomCfgToLevels(atom()) -> [rumLevel()].
atomCfgToLevels(Cfg) ->
binCfgToLevels(atom_to_binary(Cfg, utf8)).
binCfgToLevels(<<"!", Rest/binary>>) ->
?RumLevels -- binCfgToLevels(Rest);
binCfgToLevels(<<"=<", Rest/binary>>) ->
riseInWhile(?RumLevels, levelBinToAtom(Rest), []);
binCfgToLevels(<<"<=", Rest/binary>>) ->
riseInWhile(?RumLevels, levelBinToAtom(Rest), []);
binCfgToLevels(<<">=", Rest/binary>>) ->
dropInWhile(?RumLevels, levelBinToAtom(Rest));
binCfgToLevels(<<"=>", Rest/binary>>) ->
dropInWhile(?RumLevels, levelBinToAtom(Rest));
binCfgToLevels(<<"=", Rest/binary>>) ->
[levelBinToAtom(Rest)];
binCfgToLevels(<<"<", Rest/binary>>) ->
riseOutWhile(?RumLevels, levelBinToAtom(Rest), []);
binCfgToLevels(<<">", Rest/binary>>) ->
dropOutWhile(?RumLevels, levelBinToAtom(Rest));
binCfgToLevels(Rest) ->
[levelBinToAtom(Rest)].
binCfgToNum(BinStr) ->
Level = levelBinToAtom(BinStr),
dropInWhile(?RumLevels, Level).
dropInWhile([], _Level) ->
[];
dropInWhile([CurLevel | Left] = Rest, Level) ->
case CurLevel == Level of
true ->
Rest;
_ ->
dropInWhile(Left, Level)
end.
dropOutWhile([], _Level) ->
[];
dropOutWhile([CurLevel | Left], Level) ->
case CurLevel == Level of
true ->
Left;
_ ->
dropOutWhile(Left, Level)
end.
riseInWhile([], _Level, Acc) ->
Acc;
riseInWhile([CurLevel | Left], Level, Acc) ->
case CurLevel == Level of
true ->
[CurLevel | Acc];
_ ->
riseInWhile(Left, Level, [CurLevel | Acc])
end.
riseOutWhile([], _Level, Acc) ->
Acc;
riseOutWhile([CurLevel | Left], Level, Acc) ->
case CurLevel == Level of
true ->
Acc;
_ ->
riseOutWhile(Left, Level, [CurLevel | Acc])
end.
levelBinToAtom(BinStr) ->
AtomLevel = binary_to_atom(BinStr, utf8),
case lists:member(AtomLevel, ?RumLevels) of
true ->
AtomLevel;
_ ->
erlang:error(badarg)
end.
@ -447,7 +486,7 @@ is_loggable(Msg, {mask, Mask}, MyName) ->
(rumMsg:severity_as_int(Msg) band Mask) /= 0 orelse
lists:member(MyName, rumMsg:destinations(Msg));
is_loggable(Msg, SeverityThreshold, MyName) when is_atom(SeverityThreshold) ->
is_loggable(Msg, level_to_num(SeverityThreshold), MyName);
is_loggable(Msg, levelToNum(SeverityThreshold), MyName);
is_loggable(Msg, SeverityThreshold, MyName) when is_integer(SeverityThreshold) ->
rumMsg:severity_as_int(Msg) =< SeverityThreshold orelse
lists:member(MyName, rumMsg:destinations(Msg)).
@ -790,25 +829,25 @@ format_time_test_() ->
].
config_to_levels_test() ->
?assertEqual([none], config_to_levels('none')),
?assertEqual([none], atomCfgToLevels('none')),
?assertEqual({mask, 0}, config_to_mask('none')),
?assertEqual([debug], config_to_levels('=debug')),
?assertEqual([debug], config_to_levels('<info')),
?assertEqual(levels() -- [debug], config_to_levels('!=debug')),
?assertEqual(levels() -- [debug], config_to_levels('>debug')),
?assertEqual(levels() -- [debug], config_to_levels('>=info')),
?assertEqual(levels() -- [debug], config_to_levels('=>info')),
?assertEqual([debug, info, notice], config_to_levels('<=notice')),
?assertEqual([debug, info, notice], config_to_levels('=<notice')),
?assertEqual([debug], config_to_levels('<info')),
?assertEqual([debug], config_to_levels('!info')),
?assertError(badarg, config_to_levels(ok)),
?assertError(badarg, config_to_levels('<=>info')),
?assertError(badarg, config_to_levels('=<=info')),
?assertError(badarg, config_to_levels('<==>=<=>info')),
?assertEqual([debug], atomCfgToLevels('=debug')),
?assertEqual([debug], atomCfgToLevels('<info')),
?assertEqual(levels() -- [debug], atomCfgToLevels('!=debug')),
?assertEqual(levels() -- [debug], atomCfgToLevels('>debug')),
?assertEqual(levels() -- [debug], atomCfgToLevels('>=info')),
?assertEqual(levels() -- [debug], atomCfgToLevels('=>info')),
?assertEqual([debug, info, notice], atomCfgToLevels('<=notice')),
?assertEqual([debug, info, notice], atomCfgToLevels('=<notice')),
?assertEqual([debug], atomCfgToLevels('<info')),
?assertEqual([debug], atomCfgToLevels('!info')),
?assertError(badarg, atomCfgToLevels(ok)),
?assertError(badarg, atomCfgToLevels('<=>info')),
?assertError(badarg, atomCfgToLevels('=<=info')),
?assertError(badarg, atomCfgToLevels('<==>=<=>info')),
%% double negatives DO work, however
?assertEqual([debug], config_to_levels('!!=debug')),
?assertEqual(levels() -- [debug], config_to_levels('!!!=debug')),
?assertEqual([debug], atomCfgToLevels('!!=debug')),
?assertEqual(levels() -- [debug], atomCfgToLevels('!!!=debug')),
ok.
config_to_mask_test() ->
@ -819,11 +858,11 @@ config_to_mask_test() ->
ok.
mask_to_levels_test() ->
?assertEqual([], mask_to_levels(0)),
?assertEqual([debug], mask_to_levels(2#10000000)),
?assertEqual([debug, info], mask_to_levels(2#11000000)),
?assertEqual([debug, info, emergency], mask_to_levels(2#11000001)),
?assertEqual([debug, notice, error], mask_to_levels(?DEBUG bor ?NOTICE bor ?ERROR)),
?assertEqual([], maskToLevels(0)),
?assertEqual([debug], maskToLevels(2#10000000)),
?assertEqual([debug, info], maskToLevels(2#11000000)),
?assertEqual([debug, info, emergency], maskToLevels(2#11000001)),
?assertEqual([debug, notice, error], maskToLevels(?DEBUG bor ?NOTICE bor ?ERROR)),
ok.
expand_path_test() ->

+ 1
- 1
src/transform/rumTransform.erl 查看文件

@ -117,7 +117,7 @@ do_transform(Line, SinkName, Severity, Arguments0) ->
do_transform(Line, SinkName, Severity, Arguments0, safe).
do_transform(Line, SinkName, Severity, Arguments0, Safety) ->
SeverityAsInt = rumUtil:level_to_num(Severity),
SeverityAsInt = rumUtil:levelToNum(Severity),
DefaultAttrs0 = {cons, Line, {tuple, Line, [
{atom, Line, module}, {atom, Line, get(module)}]},
{cons, Line, {tuple, Line, [

+ 52
- 52
test/lager_test_backend.erl 查看文件

@ -193,7 +193,7 @@ lager_test_() ->
eRum:warning("test message"),
?assertEqual(1, count()),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual("test message", Message),
ok
end
@ -203,7 +203,7 @@ lager_test_() ->
?rumWarning("test message", []),
?assertEqual(1, count()),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual("test message", Message),
ok
end
@ -213,7 +213,7 @@ lager_test_() ->
eRum:warning_unsafe("test message"),
?assertEqual(1, count()),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual("test message", Message),
ok
end
@ -223,7 +223,7 @@ lager_test_() ->
eRum:warning("test message ~p", [self()]),
?assertEqual(1, count()),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual(lists:flatten(io_lib:format("test message ~p", [self()])), lists:flatten(Message)),
ok
end
@ -233,7 +233,7 @@ lager_test_() ->
?rumWarning("test message ~p", [self()]),
?assertEqual(1, count()),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual(lists:flatten(io_lib:format("test message ~p", [self()])), lists:flatten(Message)),
ok
end
@ -243,7 +243,7 @@ lager_test_() ->
eRum:warning_unsafe("test message ~p", [self()]),
?assertEqual(1, count()),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual(lists:flatten(io_lib:format("test message ~p", [self()])), lists:flatten(Message)),
ok
end
@ -640,7 +640,7 @@ lager_test_() ->
fun() ->
print_state(),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(info)),
?assertMatch(Level, rumUtil:levelToNum(info)),
{mask, Mask} = rumUtil:config_to_mask(info),
?assertEqual("State #state{level={mask," ++ integer_to_list(Mask) ++ "},buffer=[],ignored=[]}", lists:flatten(Message)),
ok
@ -650,7 +650,7 @@ lager_test_() ->
fun() ->
print_bad_state(),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(info)),
?assertMatch(Level, rumUtil:levelToNum(info)),
?assertEqual("State {state,1}", lists:flatten(Message)),
ok
end
@ -660,7 +660,7 @@ lager_test_() ->
spawn(fun() -> eRum:info("State ~p", [eRum:pr({state, 1}, lager)]) end),
timer:sleep(100),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(info)),
?assertMatch(Level, rumUtil:levelToNum(info)),
?assertEqual("State {state,1}", lists:flatten(Message)),
ok
end
@ -670,7 +670,7 @@ lager_test_() ->
spawn(fun() -> eRum:info("State ~p", [eRum:pr(ok, lager)]) end),
timer:sleep(100),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(info)),
?assertMatch(Level, rumUtil:levelToNum(info)),
?assertEqual("State ok", lists:flatten(Message)),
ok
end
@ -680,7 +680,7 @@ lager_test_() ->
spawn(fun() -> eRum:info("State ~p", [eRum:pr({state, 1}, not_a_module)]) end),
timer:sleep(1000),
{Level, _Time, Message, _Metadata} = pop(),
?assertMatch(Level, rumUtil:level_to_num(info)),
?assertMatch(Level, rumUtil:levelToNum(info)),
?assertEqual("State {state,1}", lists:flatten(Message)),
ok
end
@ -766,7 +766,7 @@ extra_sinks_test_() ->
?TEST_SINK_NAME:warning("test message"),
?assertEqual(1, count(?TEST_SINK_EVENT)),
{Level, _Time, Message, _Metadata} = pop(?TEST_SINK_EVENT),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual("test message", Message),
ok
end
@ -776,7 +776,7 @@ extra_sinks_test_() ->
?TEST_SINK_NAME:warning("test message ~p", [self()]),
?assertEqual(1, count(?TEST_SINK_EVENT)),
{Level, _Time, Message, _Metadata} = pop(?TEST_SINK_EVENT),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual(lists:flatten(io_lib:format("test message ~p", [self()])), lists:flatten(Message)),
ok
end
@ -1040,7 +1040,7 @@ crash_fsm_test_() ->
{Level, _, Msg, Metadata} = pop(Sink),
test_body(Expected, lists:flatten(Msg)),
?assertEqual(Pid, proplists:get_value(pid, Metadata)),
?assertEqual(rumUtil:level_to_num(error), Level)
?assertEqual(rumUtil:levelToNum(error), Level)
end
end
}
@ -1085,7 +1085,7 @@ error_logger_redirect_crash_test_() ->
{Level, _, Msg, Metadata} = pop(Sink),
test_body(Expected, lists:flatten(Msg)),
?assertEqual(Pid, proplists:get_value(pid, Metadata)),
?assertEqual(rumUtil:level_to_num(error), Level)
?assertEqual(rumUtil:levelToNum(error), Level)
end
}
end
@ -1175,7 +1175,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report([{this, is}, a, {silly, format}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = "this: is, a, silly: format",
?assertEqual(Expected, lists:flatten(Msg))
@ -1187,7 +1187,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report("this is less silly"),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = "this is less silly",
?assertEqual(Expected, lists:flatten(Msg))
@ -1198,7 +1198,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_msg("doom, doom has come upon you all"),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = "doom, doom has come upon you all",
?assertEqual(Expected, lists:flatten(Msg))
@ -1209,7 +1209,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_msg("~ts", ["Привет!"]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Привет!", lists:flatten(Msg))
end
@ -1228,7 +1228,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report([{this, is}, a, {silly, format}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = "this: is, a, silly: format",
?assertEqual(Expected, lists:flatten(Msg))
@ -1239,7 +1239,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report([[{this, is}, a, {silly, format}] || _ <- lists:seq(0, 600)]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assert(length(lists:flatten(Msg)) < 5000)
end
@ -1249,7 +1249,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report({foolish, bees}),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("{foolish,bees}", lists:flatten(Msg))
end
@ -1259,7 +1259,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report({foolish, bees}),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("{foolish,bees}", lists:flatten(Msg))
end
@ -1269,7 +1269,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report("this is less silly"),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("this is less silly", lists:flatten(Msg))
end
@ -1279,7 +1279,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report(string:copies("this is less silly", 1000)),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assert(length(lists:flatten(Msg)) < 5100)
end
@ -1289,7 +1289,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report(["this is less silly", {than, "this"}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("\"this is less silly\", than: \"this\"", lists:flatten(Msg))
end
@ -1299,7 +1299,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_msg("doom, doom has come upon you all"),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("doom, doom has come upon you all", lists:flatten(Msg))
end
@ -1309,7 +1309,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_msg("doom, doom has come upon you all ~p", [string:copies("doom", 10000)]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assert(length(lists:flatten(Msg)) < 5100)
end
@ -1319,7 +1319,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_msg("~ts", ["Привет!"]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Привет!", lists:flatten(Msg))
end
@ -1348,7 +1348,7 @@ error_logger_redirect_test_() ->
sync_error_logger:warning_msg("~ts", ["Привет!"]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(Lvl), Level),
?assertEqual(rumUtil:levelToNum(Lvl), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Привет!", lists:flatten(Msg))
end
@ -1360,7 +1360,7 @@ error_logger_redirect_test_() ->
sync_error_logger:warning_msg("doom, doom has come upon you all"),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(Lvl), Level),
?assertEqual(rumUtil:levelToNum(Lvl), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("doom, doom has come upon you all", lists:flatten(Msg))
end
@ -1372,7 +1372,7 @@ error_logger_redirect_test_() ->
sync_error_logger:warning_report([{i, like}, pie]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(Lvl), Level),
?assertEqual(rumUtil:levelToNum(Lvl), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("i: like, pie", lists:flatten(Msg))
end
@ -1384,7 +1384,7 @@ error_logger_redirect_test_() ->
sync_error_logger:warning_report({foolish, bees}),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(Lvl), Level),
?assertEqual(rumUtil:levelToNum(Lvl), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("{foolish,bees}", lists:flatten(Msg))
end
@ -1394,7 +1394,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report([{application, foo}, {exited, quittin_time}, {type, lazy}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Application foo exited with reason: quittin_time", lists:flatten(Msg))
end
@ -1404,7 +1404,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(supervisor_report, [{errorContext, france}, {offender, [{name, mini_steve}, {mfargs, {a, b, [c]}}, {pid, bleh}]}, {reason, fired}, {supervisor, {local, steve}}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Supervisor steve had child mini_steve started with a:b(c) at bleh exit with reason fired in context france", lists:flatten(Msg))
end
@ -1414,7 +1414,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(supervisor_report, [{errorContext, france}, {offender, [{name, mini_steve}, {mfargs, {a, b, [c]}}, {pid, bleh}]}, {reason, {function_clause, [{crash, handle_info, [foo]}]}}, {supervisor, {local, steve}}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Supervisor steve had child mini_steve started with a:b(c) at bleh exit with reason no function clause matching crash:handle_info(foo) in context france", lists:flatten(Msg))
end
@ -1425,7 +1425,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(supervisor_report, [{errorContext, france}, {offender, [{name, mini_steve}, {mfargs, {a, b, [c]}}, {pid, bleh}]}, {reason, {function_clause, [{crash, handle_info, [foo]}]}}, {supervisor, somepid}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Supervisor somepid had child mini_steve started with a:b(c) at bleh exit with reason no function clause matching crash:handle_info(foo) in context france", lists:flatten(Msg))
end
@ -1436,7 +1436,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(supervisor_report, [{errorContext, france}, {offender, [{mod, mini_steve}, {pid, bleh}]}, {reason, fired}, {supervisor, {local, steve}}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Supervisor steve had child at module mini_steve at bleh exit with reason fired in context france", lists:flatten(Msg))
end
@ -1446,7 +1446,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report(progress, [{application, foo}, {started_at, node()}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(info), Level),
?assertEqual(rumUtil:levelToNum(info), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = lists:flatten(io_lib:format("Application foo started on node ~w", [node()])),
?assertEqual(Expected, lists:flatten(Msg))
@ -1459,7 +1459,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report(progress, [{supervisor, {local, foo}}, {started, [{mfargs, {foo, bar, 1}}, {pid, baz}]}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(debug), Level),
?assertEqual(rumUtil:levelToNum(debug), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Supervisor foo started foo:bar/1 at pid baz", lists:flatten(Msg))
end
@ -1471,7 +1471,7 @@ error_logger_redirect_test_() ->
sync_error_logger:info_report(progress, [{supervisor, somepid}, {started, [{mfargs, {foo, bar, 1}}, {pid, baz}]}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(debug), Level),
?assertEqual(rumUtil:levelToNum(debug), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Supervisor somepid started foo:bar/1 at pid baz", lists:flatten(Msg))
end
@ -1481,7 +1481,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(crash_report, [[{pid, self()}, {registered_name, []}, {error_info, {error, emfile, [{stack, trace, 1}]}}], []]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = lists:flatten(io_lib:format("CRASH REPORT Process ~w with 0 neighbours crashed with reason: maximum number of file descriptors exhausted, check ulimit -n", [self()])),
?assertEqual(Expected, lists:flatten(Msg))
@ -1492,7 +1492,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(crash_report, [[{pid, self()}, {registered_name, []}, {error_info, {error, system_limit, [{erlang, spawn, 1}]}}], []]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = lists:flatten(io_lib:format("CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of processes exceeded", [self()])),
?assertEqual(Expected, lists:flatten(Msg))
@ -1503,7 +1503,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(crash_report, [[{pid, self()}, {registered_name, []}, {error_info, {error, system_limit, [{erlang, spawn_opt, 1}]}}], []]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = lists:flatten(io_lib:format("CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of processes exceeded", [self()])),
?assertEqual(Expected, lists:flatten(Msg))
@ -1514,7 +1514,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(crash_report, [[{pid, self()}, {registered_name, []}, {error_info, {error, system_limit, [{erlang, open_port, 1}]}}], []]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = lists:flatten(io_lib:format("CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of ports exceeded", [self()])),
?assertEqual(Expected, lists:flatten(Msg))
@ -1525,7 +1525,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(crash_report, [[{pid, self()}, {registered_name, []}, {error_info, {error, system_limit, [{erlang, list_to_atom, 1}]}}], []]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = lists:flatten(io_lib:format("CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: tried to create an atom larger than 255, or maximum atom count exceeded", [self()])),
?assertEqual(Expected, lists:flatten(Msg))
@ -1536,7 +1536,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_report(crash_report, [[{pid, self()}, {registered_name, test}, {error_info, {error, system_limit, [{ets, new, [segment_offsets, [ordered_set, public]]}, {mi_segment, open_write, 1}, {mi_buffer_converter, handle_cast, 2}, {gen_server, handle_msg, 5}, {proc_lib, init_p_do_apply, 3}]}}], []]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
Expected = lists:flatten(io_lib:format("CRASH REPORT Process ~w with 0 neighbours crashed with reason: system limit: maximum number of ETS tables exceeded", [test])),
?assertEqual(Expected, lists:flatten(Msg))
@ -1612,7 +1612,7 @@ error_logger_redirect_test_() ->
sync_error_logger:error_msg("webmachine error: path=~p~n~p~n", [Path, Reason]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Webmachine error at path \"/cgi-bin/phpmyadmin\" : no match of right hand value {error,timeout} in myapp:dostuff/2 line 123", lists:flatten(Msg))
@ -1633,7 +1633,7 @@ error_logger_redirect_test_() ->
"Request", Stack]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Cowboy handler my_handler terminated in my_handler:init/3 with reason: no match of right hand value {error,timeout} in my_handler:init/3 line 123", lists:flatten(Msg))
end
@ -1652,7 +1652,7 @@ error_logger_redirect_test_() ->
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Cowboy handler my_handler terminated in my_handler:somecallback/3 with reason: no match of right hand value {error,timeout} in my_handler:somecallback/3 line 123", lists:flatten(Msg))
end
@ -1666,7 +1666,7 @@ error_logger_redirect_test_() ->
[my_handler, to_json, 2, "Request", {}]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Cowboy handler my_handler terminated with reason: call to undefined function my_handler:to_json/2", lists:flatten(Msg))
end
@ -1683,7 +1683,7 @@ error_logger_redirect_test_() ->
[my_listner, ConnectionPid, 1, self(), {badmatch, 2}, Stack]),
_ = gen_event:which_handlers(error_logger),
{Level, _, Msg, Metadata} = pop(Sink),
?assertEqual(rumUtil:level_to_num(error), Level),
?assertEqual(rumUtil:levelToNum(error), Level),
?assertEqual(self(), proplists:get_value(pid, Metadata)),
?assertEqual("Cowboy stream 1 with ranch listener my_listner and "
"connection process <0.82.0> had its request process exit "

+ 1
- 1
test/lager_test_function_transform.erl 查看文件

@ -102,7 +102,7 @@ transform_function_test_() ->
eRum:warning("test message"),
?assertEqual(1, lager_test_backend:count()),
{Level, _Time, Message, _Metadata} = lager_test_backend:pop(),
?assertMatch(Level, rumUtil:level_to_num(warning)),
?assertMatch(Level, rumUtil:levelToNum(warning)),
?assertEqual("test message", Message),
ok
end

正在加载...
取消
保存