diff --git a/src/lager_util.erl b/src/lager_util.erl index ae88d19..9980fb2 100644 --- a/src/lager_util.erl +++ b/src/lager_util.erl @@ -392,6 +392,7 @@ validate_trace_filter(Filter) when is_tuple(Filter), is_atom(element(1, Filter)) false; validate_trace_filter(Filter) -> case lists:all(fun({Key, '*'}) when is_atom(Key) -> true; + ({Key, '!'}) when is_atom(Key) -> true; ({Key, _Value}) when is_atom(Key) -> true; ({Key, '=', _Value}) when is_atom(Key) -> true; ({Key, '<', _Value}) when is_atom(Key) -> true; @@ -416,6 +417,8 @@ trace_acc([], Acc) -> lists:reverse(Acc); trace_acc([{Key, '*'}|T], Acc) -> trace_acc(T, [glc:wc(Key)|Acc]); +trace_acc([{Key, '!'}|T], Acc) -> + trace_acc(T, [glc:nf(Key)|Acc]); trace_acc([{Key, Val}|T], Acc) -> trace_acc(T, [glc:eq(Key, Val)|Acc]); trace_acc([{Key, '=', Val}|T], Acc) -> diff --git a/test/lager_test_backend.erl b/test/lager_test_backend.erl index c3e2329..9ce43fc 100644 --- a/test/lager_test_backend.erl +++ b/test/lager_test_backend.erl @@ -388,10 +388,15 @@ lager_test_() -> lager:info([{requestid, 8}], "hello world"), lager:info([{requestid, 9}, {foo, bar}], "hello world"), lager:info([{requestid, 10}], "hello world"), - ?assertEqual(7, count()), + lager:trace(?MODULE, [{fu, '!'}]), + lager:info([{foo, bar}], "hello world"), + lager:info([{ooh, car}], "hello world"), + lager:trace(?MODULE, [{fu, '*'}]), + lager:info([{fu, bar}], "hello world"), + ?assertEqual(10, count()), lager:clear_all_traces(), lager:info([{requestid, 6}], "hello world"), - ?assertEqual(7, count()), + ?assertEqual(10, count()), ok end },