瀏覽代碼

Merge pull request #306 from basho/gh267-fix

Fix internal tuple argument order

Reviewed-by: macintux
pull/312/merge
Bishop Bors 9 年之前
父節點
當前提交
e8348964df
共有 2 個文件被更改,包括 80 次插入2 次删除
  1. +14
    -2
      src/lager.erl
  2. +66
    -0
      test/lager_test_backend.erl

+ 14
- 2
src/lager.erl 查看文件

@ -274,7 +274,16 @@ stop_trace(Backend, Filter, Level) ->
stop_trace({Backend, Filter, Level}) ->
stop_trace(Backend, Filter, Level).
stop_trace_int({Backend, _Filter, _Level} = Trace, Sink) ->
%% Important: validate_trace_filters orders the arguments of
%% trace tuples differently than the way outside callers have
%% the trace tuple.
%%
%% That is to say, outside they are represented as
%% `{Backend, Filter, Level}'
%%
%% and when they come back from validation, they're
%% `{Filter, Level, Backend}'
stop_trace_int({_Filter, _Level, Backend} = Trace, Sink) ->
{Level, Traces} = lager_config:get({Sink, loglevel}),
NewTraces = lists:delete(Trace, Traces),
_ = lager_util:trace_filter([ element(1, T) || T <- NewTraces ]),
@ -285,7 +294,10 @@ stop_trace_int({Backend, _Filter, _Level} = Trace, Sink) ->
%% check no other traces point here
case lists:keyfind(Backend, 3, NewTraces) of
false ->
gen_event:delete_handler(Sink, Backend, []);
gen_event:delete_handler(Sink, Backend, []),
lager_config:global_set(handlers,
lists:keydelete(Backend, 1,
lager_config:global_get(handlers)));
_ ->
ok
end;

+ 66
- 0
test/lager_test_backend.erl 查看文件

@ -536,6 +536,39 @@ lager_test_() ->
ok
end
},
{"stopped trace stops and removes its event handler - default sink (gh#267)",
fun() ->
Sink = ?DEFAULT_SINK,
StartHandlers = gen_event:which_handlers(Sink),
{_, T0} = lager_config:get({Sink, loglevel}),
StartGlobal = lager_config:global_get(handlers),
?assertEqual([], T0),
{ok, TestTrace1} = lager:trace_file("/tmp/test", [{a,b}]),
MidHandlers = gen_event:which_handlers(Sink),
{ok, TestTrace2} = lager:trace_file("/tmp/test", [{c,d}]),
MidHandlers = gen_event:which_handlers(Sink),
?assertEqual(length(StartHandlers)+1, length(MidHandlers)),
MidGlobal = lager_config:global_get(handlers),
?assertEqual(length(StartGlobal)+1, length(MidGlobal)),
{_, T1} = lager_config:get({Sink, loglevel}),
?assertEqual(2, length(T1)),
ok = lager:stop_trace(TestTrace1),
{_, T2} = lager_config:get({Sink, loglevel}),
?assertEqual(1, length(T2)),
?assertEqual(length(StartHandlers)+1, length(
gen_event:which_handlers(Sink))),
?assertEqual(length(StartGlobal)+1, length(lager_config:global_get(handlers))),
ok = lager:stop_trace(TestTrace2),
EndHandlers = gen_event:which_handlers(?DEFAULT_SINK),
EndGlobal = lager_config:global_get(handlers),
{_, T3} = lager_config:get({Sink, loglevel}),
?assertEqual([], T3),
?assertEqual(StartHandlers, EndHandlers),
?assertEqual(StartGlobal, EndGlobal),
ok
end
},
{"record printing works",
fun() ->
print_state(),
@ -691,6 +724,39 @@ extra_sinks_test_() ->
ok
end
},
{"stopped trace stops and removes its event handler - test sink (gh#267)",
fun() ->
Sink = ?TEST_SINK_EVENT,
StartHandlers = gen_event:which_handlers(Sink),
{_, T0} = lager_config:get({Sink, loglevel}),
StartGlobal = lager_config:global_get(handlers),
?assertEqual([], T0),
{ok, TestTrace1} = lager:trace_file("/tmp/test", [{sink, Sink}, {a,b}]),
MidHandlers = gen_event:which_handlers(Sink),
{ok, TestTrace2} = lager:trace_file("/tmp/test", [{sink, Sink}, {c,d}]),
MidHandlers = gen_event:which_handlers(Sink),
?assertEqual(length(StartHandlers)+1, length(MidHandlers)),
MidGlobal = lager_config:global_get(handlers),
?assertEqual(length(StartGlobal)+1, length(MidGlobal)),
{_, T1} = lager_config:get({Sink, loglevel}),
?assertEqual(2, length(T1)),
ok = lager:stop_trace(TestTrace1),
{_, T2} = lager_config:get({Sink, loglevel}),
?assertEqual(1, length(T2)),
?assertEqual(length(StartHandlers)+1, length(
gen_event:which_handlers(Sink))),
?assertEqual(length(StartGlobal)+1, length(lager_config:global_get(handlers))),
ok = lager:stop_trace(TestTrace2),
EndHandlers = gen_event:which_handlers(Sink),
EndGlobal = lager_config:global_get(handlers),
{_, T3} = lager_config:get({Sink, loglevel}),
?assertEqual([], T3),
?assertEqual(StartHandlers, EndHandlers),
?assertEqual(StartGlobal, EndGlobal),
ok
end
},
{"log messages below the threshold are ignored",
fun() ->
?assertEqual(0, count(?TEST_SINK_EVENT)),

Loading…
取消
儲存