Browse Source

Revert decision to throw a {sink, Sink} tuple at every backend; instead, special case the throttle

pull/264/head
John R. Daily 10 years ago
parent
commit
4f94260239
6 changed files with 28 additions and 27 deletions
  1. +1
    -1
      src/error_logger_lager_h.erl
  2. +7
    -9
      src/lager_console_backend.erl
  3. +0
    -2
      src/lager_file_backend.erl
  4. +13
    -6
      src/lager_handler_watcher.erl
  5. +1
    -1
      test/lager_crash_backend.erl
  6. +6
    -8
      test/lager_test_backend.erl

+ 1
- 1
src/error_logger_lager_h.erl View File

@ -74,7 +74,7 @@ set_high_water(N) ->
gen_event:call(error_logger, ?MODULE, {set_high_water, N}, infinity). gen_event:call(error_logger, ?MODULE, {set_high_water, N}, infinity).
-spec init(any()) -> {ok, #state{}}. -spec init(any()) -> {ok, #state{}}.
init([{sink, Sink}, HighWaterMark]) ->
init([HighWaterMark]) ->
{ok, #state{hwm=HighWaterMark}}. {ok, #state{hwm=HighWaterMark}}.
handle_call({set_high_water, N}, State) -> handle_call({set_high_water, N}, State) ->

+ 7
- 9
src/lager_console_backend.erl View File

@ -40,8 +40,6 @@
%% @private %% @private
init([Level]) when is_atom(Level) -> init([Level]) when is_atom(Level) ->
init(Level); init(Level);
init([{sink, _Sink}|T]) ->
init(T);
init([Level, true]) -> % for backwards compatibility init([Level, true]) -> % for backwards compatibility
init([Level,{lager_default_formatter,[{eol, eol()}]}]); init([Level,{lager_default_formatter,[{eol, eol()}]}]);
init([Level,false]) -> % for backwards compatibility init([Level,false]) -> % for backwards compatibility
@ -188,7 +186,7 @@ console_log_test_() ->
unregister(user), unregister(user),
register(user, Pid), register(user, Pid),
erlang:group_leader(Pid, whereis(lager_event)), 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_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}),
lager:log(info, self(), "Test message"), lager:log(info, self(), "Test message"),
receive receive
@ -208,7 +206,7 @@ console_log_test_() ->
unregister(user), unregister(user),
register(user, Pid), register(user, Pid),
erlang:group_leader(Pid, whereis(lager_event)), 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_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}),
lager:info("Test message"), lager:info("Test message"),
PidStr = pid_to_list(self()), PidStr = pid_to_list(self()),
@ -229,7 +227,7 @@ console_log_test_() ->
register(user, Pid), register(user, Pid),
erlang:group_leader(Pid, whereis(lager_event)), erlang:group_leader(Pid, whereis(lager_event)),
gen_event:add_handler(lager_event, lager_console_backend, 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"]}]), module,"#",function,"#",file,"#",line,"#",message,"\r\n"]}]),
lager_config:set({lager_event, loglevel}, {?INFO, []}), lager_config:set({lager_event, loglevel}, {?INFO, []}),
lager:info("Test message"), lager:info("Test message"),
@ -252,7 +250,7 @@ console_log_test_() ->
Pid = spawn(F(self())), Pid = spawn(F(self())),
unregister(user), unregister(user),
register(user, Pid), 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)), erlang:group_leader(Pid, whereis(lager_event)),
lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}), lager_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}),
lager:debug("Test message"), lager:debug("Test message"),
@ -282,7 +280,7 @@ console_log_test_() ->
Pid = spawn(F(self())), Pid = spawn(F(self())),
unregister(user), unregister(user),
register(user, Pid), 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_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}),
erlang:group_leader(Pid, whereis(lager_event)), erlang:group_leader(Pid, whereis(lager_event)),
lager:debug("Test message"), lager:debug("Test message"),
@ -321,7 +319,7 @@ console_log_test_() ->
Pid = spawn(F(self())), Pid = spawn(F(self())),
unregister(user), unregister(user),
register(user, Pid), 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_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}),
lager:set_loglevel(lager_console_backend, '!=info'), lager:set_loglevel(lager_console_backend, '!=info'),
erlang:group_leader(Pid, whereis(lager_event)), erlang:group_leader(Pid, whereis(lager_event)),
@ -352,7 +350,7 @@ console_log_test_() ->
Pid = spawn(F(self())), Pid = spawn(F(self())),
unregister(user), unregister(user),
register(user, Pid), 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_config:set({lager_event, loglevel}, {element(2, lager_util:config_to_mask(info)), []}),
lager:set_loglevel(lager_console_backend, '=debug'), lager:set_loglevel(lager_console_backend, '=debug'),
erlang:group_leader(Pid, whereis(lager_event)), erlang:group_leader(Pid, whereis(lager_event)),

+ 0
- 2
src/lager_file_backend.erl View File

@ -80,8 +80,6 @@
{formatter_config, term()}. {formatter_config, term()}.
-spec init([option(),...]) -> {ok, #state{}} | {error, bad_config}. -spec init([option(),...]) -> {ok, #state{}} | {error, bad_config}.
init([{sink, _Sink}|Options]) ->
init(Options);
init({FileName, LogLevel}) when is_list(FileName), is_atom(LogLevel) -> init({FileName, LogLevel}) when is_list(FileName), is_atom(LogLevel) ->
%% backwards compatability hack %% backwards compatability hack
init([{file, FileName}, {level, LogLevel}]); init([{file, FileName}, {level, LogLevel}]);

+ 13
- 6
src/lager_handler_watcher.erl View File

@ -47,11 +47,8 @@ start_link(Sink, Module, Config) ->
start(Sink, Module, Config) -> start(Sink, Module, Config) ->
gen_server:start(?MODULE, [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]) -> init([Sink, Module, Config]) ->
install_handler(Sink, Module, [Config]),
install_handler(Sink, Module, Config),
{ok, #state{sink=Sink, module=Module, config=Config}}. {ok, #state{sink=Sink, module=Module, config=Config}}.
handle_call(_Call, _From, State) -> handle_call(_Call, _From, State) ->
@ -90,9 +87,19 @@ code_change(_OldVsn, State, _Extra) ->
{ok, State}. {ok, State}.
%% internal %% 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) -> 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 -> ok ->
?INT_LOG(debug, "Lager installed handler ~p into ~p", [Module, Sink]), ?INT_LOG(debug, "Lager installed handler ~p into ~p", [Module, Sink]),
lager:update_loglevel_config(Sink), lager:update_loglevel_config(Sink),

+ 1
- 1
test/lager_crash_backend.erl View File

@ -27,7 +27,7 @@
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
-endif. -endif.
init([{sink, _Sink}, CrashBefore, CrashAfter]) ->
init([CrashBefore, CrashAfter]) ->
case is_tuple(CrashBefore) andalso (timer:now_diff(CrashBefore, os:timestamp()) > 0) of case is_tuple(CrashBefore) andalso (timer:now_diff(CrashBefore, os:timestamp()) > 0) of
true -> true ->
%?debugFmt("crashing!~n", []), %?debugFmt("crashing!~n", []),

+ 6
- 8
test/lager_test_backend.erl View File

@ -35,8 +35,6 @@
-export([pop/0, count/0, count_ignored/0, flush/0, print_state/0]). -export([pop/0, count/0, count_ignored/0, flush/0, print_state/0]).
-endif. -endif.
init([{sink, _Sink}, Level]) ->
init(Level);
init(Level) -> init(Level) ->
{ok, #state{level=lager_util:config_to_mask(Level), buffer=[], ignored=[]}}. {ok, #state{level=lager_util:config_to_mask(Level), buffer=[], ignored=[]}}.
@ -150,11 +148,11 @@ lager_test_() ->
?assertEqual(0, count()) ?assertEqual(0, count())
end 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", {"logging works",
fun() -> fun() ->
lager:warning("test message"), lager:warning("test message"),
@ -665,7 +663,7 @@ extra_sinks_test_() ->
ok ok
end end
} }
]
]
}. }.
setup_sink() -> setup_sink() ->

Loading…
Cancel
Save