From 4f94260239393eac2d2a7d3ae0e9bad183678072 Mon Sep 17 00:00:00 2001 From: "John R. Daily" Date: Fri, 15 May 2015 15:40:33 -0400 Subject: [PATCH] Revert decision to throw a {sink, Sink} tuple at every backend; instead, special case the throttle --- src/error_logger_lager_h.erl | 2 +- src/lager_console_backend.erl | 16 +++++++--------- src/lager_file_backend.erl | 2 -- src/lager_handler_watcher.erl | 19 +++++++++++++------ test/lager_crash_backend.erl | 2 +- test/lager_test_backend.erl | 14 ++++++-------- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/error_logger_lager_h.erl b/src/error_logger_lager_h.erl index 6b55b79..a19e441 100644 --- a/src/error_logger_lager_h.erl +++ b/src/error_logger_lager_h.erl @@ -74,7 +74,7 @@ set_high_water(N) -> gen_event:call(error_logger, ?MODULE, {set_high_water, N}, infinity). -spec init(any()) -> {ok, #state{}}. -init([{sink, Sink}, HighWaterMark]) -> +init([HighWaterMark]) -> {ok, #state{hwm=HighWaterMark}}. handle_call({set_high_water, N}, State) -> diff --git a/src/lager_console_backend.erl b/src/lager_console_backend.erl index eb563ba..e922ec3 100644 --- a/src/lager_console_backend.erl +++ b/src/lager_console_backend.erl @@ -40,8 +40,6 @@ %% @private init([Level]) when is_atom(Level) -> init(Level); -init([{sink, _Sink}|T]) -> - init(T); init([Level, true]) -> % for backwards compatibility init([Level,{lager_default_formatter,[{eol, eol()}]}]); init([Level,false]) -> % for backwards compatibility @@ -188,7 +186,7 @@ console_log_test_() -> unregister(user), register(user, Pid), erlang:group_leader(Pid, whereis(lager_event)), - gen_event:add_handler(lager_event, lager_console_backend, [{sink, lager_event}, info]), + gen_event:add_handler(lager_event, lager_console_backend, info), lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}), lager:log(info, self(), "Test message"), receive @@ -208,7 +206,7 @@ console_log_test_() -> unregister(user), register(user, Pid), erlang:group_leader(Pid, whereis(lager_event)), - gen_event:add_handler(lager_event, lager_console_backend, [{sink, lager_event}, info, true]), + gen_event:add_handler(lager_event, lager_console_backend, [info, true]), lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}), lager:info("Test message"), PidStr = pid_to_list(self()), @@ -229,7 +227,7 @@ console_log_test_() -> register(user, Pid), erlang:group_leader(Pid, whereis(lager_event)), gen_event:add_handler(lager_event, lager_console_backend, - [{sink, lager_event}, info, {lager_default_formatter, [date,"#",time,"#",severity,"#",node,"#",pid,"#", + [info, {lager_default_formatter, [date,"#",time,"#",severity,"#",node,"#",pid,"#", module,"#",function,"#",file,"#",line,"#",message,"\r\n"]}]), lager_config:set({lager_event, loglevel}, {?INFO, []}), lager:info("Test message"), @@ -252,7 +250,7 @@ console_log_test_() -> Pid = spawn(F(self())), unregister(user), register(user, Pid), - gen_event:add_handler(lager_event, lager_console_backend, [{sink, lager_event}, info]), + gen_event:add_handler(lager_event, lager_console_backend, info), erlang:group_leader(Pid, whereis(lager_event)), lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}), lager:debug("Test message"), @@ -282,7 +280,7 @@ console_log_test_() -> Pid = spawn(F(self())), unregister(user), register(user, Pid), - gen_event:add_handler(lager_event, lager_console_backend, [{sink, lager_event}, info]), + gen_event:add_handler(lager_event, lager_console_backend, info), lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}), erlang:group_leader(Pid, whereis(lager_event)), lager:debug("Test message"), @@ -321,7 +319,7 @@ console_log_test_() -> Pid = spawn(F(self())), unregister(user), register(user, Pid), - gen_event:add_handler(lager_event, lager_console_backend, [{sink, lager_event}, info]), + gen_event:add_handler(lager_event, lager_console_backend, info), lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}), lager:set_loglevel(lager_console_backend, '!=info'), erlang:group_leader(Pid, whereis(lager_event)), @@ -352,7 +350,7 @@ console_log_test_() -> Pid = spawn(F(self())), unregister(user), register(user, Pid), - gen_event:add_handler(lager_event, lager_console_backend, [{sink, lager_event}, info]), + gen_event:add_handler(lager_event, lager_console_backend, info), lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}), lager:set_loglevel(lager_console_backend, '=debug'), erlang:group_leader(Pid, whereis(lager_event)), diff --git a/src/lager_file_backend.erl b/src/lager_file_backend.erl index 4036381..15292d6 100644 --- a/src/lager_file_backend.erl +++ b/src/lager_file_backend.erl @@ -80,8 +80,6 @@ {formatter_config, term()}. -spec init([option(),...]) -> {ok, #state{}} | {error, bad_config}. -init([{sink, _Sink}|Options]) -> - init(Options); init({FileName, LogLevel}) when is_list(FileName), is_atom(LogLevel) -> %% backwards compatability hack init([{file, FileName}, {level, LogLevel}]); diff --git a/src/lager_handler_watcher.erl b/src/lager_handler_watcher.erl index 6e8b739..4251db5 100644 --- a/src/lager_handler_watcher.erl +++ b/src/lager_handler_watcher.erl @@ -47,11 +47,8 @@ start_link(Sink, Module, Config) -> start(Sink, Module, Config) -> gen_server:start(?MODULE, [Sink, Module, Config], []). -init([Sink, Module, Config]) when is_list(Config) -> - install_handler(Sink, Module, Config), - {ok, #state{sink=Sink, module=Module, config=Config}}; init([Sink, Module, Config]) -> - install_handler(Sink, Module, [Config]), + install_handler(Sink, Module, Config), {ok, #state{sink=Sink, module=Module, config=Config}}. handle_call(_Call, _From, State) -> @@ -90,9 +87,19 @@ code_change(_OldVsn, State, _Extra) -> {ok, State}. %% internal - +install_handler(Sink, lager_backend_throttle, Config) -> + %% The lager_backend_throttle needs to know to which sink it is + %% attached, hence this admittedly ugly workaround. Handlers are + %% sensitive to the structure of the configuration sent to `init', + %% sadly, so it's not trivial to add a configuration item to be + %% ignored to backends without breaking 3rd party handlers. + install_handler2(Sink, lager_backend_throttle, [{sink, Sink}|Config]); install_handler(Sink, Module, Config) -> - case gen_event:add_sup_handler(Sink, Module, [{sink, Sink}|Config]) of + install_handler2(Sink, Module, Config). + +%% private +install_handler2(Sink, Module, Config) -> + case gen_event:add_sup_handler(Sink, Module, Config) of ok -> ?INT_LOG(debug, "Lager installed handler ~p into ~p", [Module, Sink]), lager:update_loglevel_config(Sink), diff --git a/test/lager_crash_backend.erl b/test/lager_crash_backend.erl index fa137f1..b573a73 100644 --- a/test/lager_crash_backend.erl +++ b/test/lager_crash_backend.erl @@ -27,7 +27,7 @@ -include_lib("eunit/include/eunit.hrl"). -endif. -init([{sink, _Sink}, CrashBefore, CrashAfter]) -> +init([CrashBefore, CrashAfter]) -> case is_tuple(CrashBefore) andalso (timer:now_diff(CrashBefore, os:timestamp()) > 0) of true -> %?debugFmt("crashing!~n", []), diff --git a/test/lager_test_backend.erl b/test/lager_test_backend.erl index 75d37f9..f8f0632 100644 --- a/test/lager_test_backend.erl +++ b/test/lager_test_backend.erl @@ -35,8 +35,6 @@ -export([pop/0, count/0, count_ignored/0, flush/0, print_state/0]). -endif. -init([{sink, _Sink}, Level]) -> - init(Level); init(Level) -> {ok, #state{level=lager_util:config_to_mask(Level), buffer=[], ignored=[]}}. @@ -150,11 +148,11 @@ lager_test_() -> ?assertEqual(0, count()) end }, - {"test sink not running", - fun() -> - ?assertEqual({error, {sink_not_configured, test}}, lager:log(test, info, self(), "~p", "not running")) - end - }, + {"test sink not running", + fun() -> + ?assertEqual({error, {sink_not_configured, test}}, lager:log(test, info, self(), "~p", "not running")) + end + }, {"logging works", fun() -> lager:warning("test message"), @@ -665,7 +663,7 @@ extra_sinks_test_() -> ok end } - ] + ] }. setup_sink() ->