|
|
@ -408,44 +408,56 @@ validate_trace(_) -> |
|
|
|
|
|
|
|
validate_trace_filter(Filter) when is_tuple(Filter), is_atom(element(1, Filter)) =:= false -> |
|
|
|
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; |
|
|
|
({Key, '>', _Value}) when is_atom(Key) -> true; |
|
|
|
(_) -> false end, Filter) of |
|
|
|
true -> |
|
|
|
true; |
|
|
|
_ -> |
|
|
|
false |
|
|
|
end. |
|
|
|
validate_trace_filter(Filter) when is_list(Filter) -> |
|
|
|
lists:all(fun validate_trace_filter/1, Filter); |
|
|
|
validate_trace_filter({Key, '*'}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter({any, L}) when is_list(L) -> lists:all(fun validate_trace_filter/1, L); |
|
|
|
validate_trace_filter({all, L}) when is_list(L) -> lists:all(fun validate_trace_filter/1, L); |
|
|
|
validate_trace_filter({null, Bool}) when is_boolean(Bool) -> true; |
|
|
|
validate_trace_filter({Key, _Value}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter({Key, '=', _Value}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter({Key, '!=', _Value}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter({Key, '<', _Value}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter({Key, '=<', _Value}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter({Key, '>', _Value}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter({Key, '>=', _Value}) when is_atom(Key) -> true; |
|
|
|
validate_trace_filter(_) -> false. |
|
|
|
|
|
|
|
trace_all(Query) -> |
|
|
|
glc:all(trace_acc(Query)). |
|
|
|
glc:all(trace_acc(Query)). |
|
|
|
|
|
|
|
trace_any(Query) -> |
|
|
|
glc:any(Query). |
|
|
|
glc:any(Query). |
|
|
|
|
|
|
|
trace_acc(Query) -> |
|
|
|
trace_acc(Query, []). |
|
|
|
|
|
|
|
trace_acc([], Acc) -> |
|
|
|
lists:reverse(Acc); |
|
|
|
lists:reverse(Acc); |
|
|
|
trace_acc([{any, L}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:any(L)|Acc]); |
|
|
|
trace_acc([{all, L}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:all(L)|Acc]); |
|
|
|
trace_acc([{null, Bool}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:null(Bool)|Acc]); |
|
|
|
trace_acc([{Key, '*'}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:wc(Key)|Acc]); |
|
|
|
trace_acc(T, [glc:wc(Key)|Acc]); |
|
|
|
trace_acc([{Key, '!'}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:nf(Key)|Acc]); |
|
|
|
trace_acc(T, [glc:nf(Key)|Acc]); |
|
|
|
trace_acc([{Key, Val}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:eq(Key, Val)|Acc]); |
|
|
|
trace_acc(T, [glc:eq(Key, Val)|Acc]); |
|
|
|
trace_acc([{Key, '=', Val}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:eq(Key, Val)|Acc]); |
|
|
|
trace_acc(T, [glc:eq(Key, Val)|Acc]); |
|
|
|
trace_acc([{Key, '!=', Val}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:neq(Key, Val)|Acc]); |
|
|
|
trace_acc([{Key, '>', Val}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:gt(Key, Val)|Acc]); |
|
|
|
trace_acc(T, [glc:gt(Key, Val)|Acc]); |
|
|
|
trace_acc([{Key, '>=', Val}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:gte(Key, Val)|Acc]); |
|
|
|
trace_acc([{Key, '=<', Val}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:lte(Key, Val)|Acc]); |
|
|
|
trace_acc([{Key, '<', Val}|T], Acc) -> |
|
|
|
trace_acc(T, [glc:lt(Key, Val)|Acc]). |
|
|
|
|
|
|
|
trace_acc(T, [glc:lt(Key, Val)|Acc]). |
|
|
|
|
|
|
|
check_traces(_, _, [], Acc) -> |
|
|
|
lists:flatten(Acc); |
|
|
@ -464,10 +476,10 @@ check_trace(Attrs, {Filter, _Level, Dest}) when is_tuple(Filter) -> |
|
|
|
glc:handle(?DEFAULT_TRACER, Made), |
|
|
|
Match = glc_lib:matches(Filter, Made), |
|
|
|
case Match of |
|
|
|
true -> |
|
|
|
Dest; |
|
|
|
false -> |
|
|
|
[] |
|
|
|
true -> |
|
|
|
Dest; |
|
|
|
false -> |
|
|
|
[] |
|
|
|
end. |
|
|
|
|
|
|
|
-spec is_loggable(lager_msg:lager_msg(), non_neg_integer()|{'mask', non_neg_integer()}, term()) -> boolean(). |
|
|
|