From 83135cdf947a60becd4570f963d76a5402f0434d Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Thu, 4 Feb 2021 18:21:42 +0800 Subject: [PATCH] =?UTF-8?q?ft:=20=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eRum.sample.config | 57 +++++ include/eRum.hrl | 55 +++-- rebar.config | 2 +- src/backend/rumBackendFile.erl | 4 +- src/eRum.erl | 29 ++- src/eRum_app.erl | 17 +- src/formatter/rumFormatter.erl | 4 +- src/misc/rumMsg.erl | 21 +- src/misc/rumUtil.erl | 285 ++++++++++++++----------- src/transform/rumTransform.erl | 2 +- test/lager_test_backend.erl | 104 ++++----- test/lager_test_function_transform.erl | 2 +- 12 files changed, 330 insertions(+), 252 deletions(-) create mode 100644 eRum.sample.config diff --git a/eRum.sample.config b/eRum.sample.config new file mode 100644 index 0000000..1637203 --- /dev/null +++ b/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} + ]} +]. + + diff --git a/include/eRum.hrl b/include/eRum.hrl index 6617f08..ce543ea 100644 --- a/include/eRum.hrl +++ b/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() diff --git a/rebar.config b/rebar.config index d08fe42..e9ada48 100644 --- a/rebar.config +++ b/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"} ]}. diff --git a/src/backend/rumBackendFile.erl b/src/backend/rumBackendFile.erl index be53523..09e9d24 100644 --- a/src/backend/rumBackendFile.erl +++ b/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()}. diff --git a/src/eRum.erl b/src/eRum.erl index 617a896..07a40f6 100644 --- a/src/eRum.erl +++ b/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 diff --git a/src/eRum_app.erl b/src/eRum_app.erl index 59d18b3..06e87c5 100644 --- a/src/eRum_app.erl +++ b/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; diff --git a/src/formatter/rumFormatter.erl b/src/formatter/rumFormatter.erl index 1dcde81..2a5df61 100644 --- a/src/formatter/rumFormatter.erl +++ b/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) -> diff --git a/src/misc/rumMsg.erl b/src/misc/rumMsg.erl index 734ca58..e489763 100644 --- a/src/misc/rumMsg.erl +++ b/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) -> diff --git a/src/misc/rumUtil.erl b/src/misc/rumUtil.erl index 75b9555..d44dc28 100644 --- a/src/misc/rumUtil.erl +++ b/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('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('=info')), - ?assertError(badarg, config_to_levels('=<=info')), - ?assertError(badarg, config_to_levels('<==>=<=>info')), + ?assertEqual([debug], atomCfgToLevels('=debug')), + ?assertEqual([debug], atomCfgToLevels('debug')), + ?assertEqual(levels() -- [debug], atomCfgToLevels('>=info')), + ?assertEqual(levels() -- [debug], atomCfgToLevels('=>info')), + ?assertEqual([debug, info, notice], atomCfgToLevels('<=notice')), + ?assertEqual([debug, info, notice], 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() -> diff --git a/src/transform/rumTransform.erl b/src/transform/rumTransform.erl index 9a74a20..2f0ee65 100644 --- a/src/transform/rumTransform.erl +++ b/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, [ diff --git a/test/lager_test_backend.erl b/test/lager_test_backend.erl index 0ae8e34..647ef5f 100644 --- a/test/lager_test_backend.erl +++ b/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 " diff --git a/test/lager_test_function_transform.erl b/test/lager_test_function_transform.erl index f3b0539..8683363 100644 --- a/test/lager_test_function_transform.erl +++ b/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