aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2018-05-16 14:58:03 +0200
committerLukas Larsson <[email protected]>2018-05-21 17:43:53 +0200
commit4e9f0492fd46d1ba6d919883cbdd5caaff8a949b (patch)
treeec1a86fe0da1a0c06f0d26c89e503362d514ef54
parent0afab64f105c09976c7c07a64f54bf962ff9a18f (diff)
downloadotp-4e9f0492fd46d1ba6d919883cbdd5caaff8a949b.tar.gz
otp-4e9f0492fd46d1ba6d919883cbdd5caaff8a949b.tar.bz2
otp-4e9f0492fd46d1ba6d919883cbdd5caaff8a949b.zip
Add Action=differs to logger_filters:domain/2
-rw-r--r--lib/kernel/doc/src/logger_filters.xml4
-rw-r--r--lib/kernel/src/logger_filters.erl6
-rw-r--r--lib/kernel/test/logger_filters_SUITE.erl25
3 files changed, 28 insertions, 7 deletions
diff --git a/lib/kernel/doc/src/logger_filters.xml b/lib/kernel/doc/src/logger_filters.xml
index c34ec7d14c..1bbae8be21 100644
--- a/lib/kernel/doc/src/logger_filters.xml
+++ b/lib/kernel/doc/src/logger_filters.xml
@@ -78,6 +78,10 @@
<tag><c><anno>Compare</anno> = equals</c></tag>
<item><p>The filter matches if <c>Domain</c> is equal
to <c>MatchDomain</c>.</p></item>
+ <tag><c><anno>Compare</anno> = differs</c></tag>
+ <item><p>The filter matches if <c>Domain</c> differs
+ from <c>MatchDomain</c>, or if there is no domain field
+ in metadata.</p></item>
<tag><c><anno>Compare</anno> = no_domain</c></tag>
<item><p>The filter matches if there is no domain field in
metadata. In this case <c><anno>MatchDomain</anno></c> shall
diff --git a/lib/kernel/src/logger_filters.erl b/lib/kernel/src/logger_filters.erl
index 85928f0fd6..592ff28cc2 100644
--- a/lib/kernel/src/logger_filters.erl
+++ b/lib/kernel/src/logger_filters.erl
@@ -38,6 +38,7 @@ domain(#{meta:=Meta}=Log,{Action,Compare,MatchDomain})
(Compare==prefix_of orelse
Compare==starts_with orelse
Compare==equals orelse
+ Compare==differs orelse
Compare==no_domain) andalso
is_list(MatchDomain) ->
filter_domain(Compare,Meta,MatchDomain,on_match(Action,Log));
@@ -87,9 +88,12 @@ filter_domain(starts_with,#{domain:=Domain},MatchDomain,OnMatch) ->
is_prefix(MatchDomain,Domain,OnMatch);
filter_domain(equals,#{domain:=Domain},Domain,OnMatch) ->
OnMatch;
+filter_domain(differs,#{domain:=Domain},MatchDomain,OnMatch)
+ when Domain=/=MatchDomain ->
+ OnMatch;
filter_domain(Action,Meta,_,OnMatch) ->
case maps:is_key(domain,Meta) of
- false when Action==no_domain -> OnMatch;
+ false when Action==no_domain; Action==differs -> OnMatch;
_ -> ignore
end.
diff --git a/lib/kernel/test/logger_filters_SUITE.erl b/lib/kernel/test/logger_filters_SUITE.erl
index 21f14bbc02..c4b31370ff 100644
--- a/lib/kernel/test/logger_filters_SUITE.erl
+++ b/lib/kernel/test/logger_filters_SUITE.erl
@@ -81,6 +81,8 @@ domain(_Config) ->
stop = logger_filters:domain(?dlog([]),{stop,starts_with,[]}),
L3 = logger_filters:domain(L3=?dlog([]),{log,equals,[]}),
stop = logger_filters:domain(?dlog([]),{stop,equals,[]}),
+ ignore = logger_filters:domain(?dlog([]),{log,differs,[]}),
+ ignore = logger_filters:domain(?dlog([]),{stop,differs,[]}),
ignore = logger_filters:domain(?dlog([]),{log,no_domain,[]}),
ignore = logger_filters:domain(?dlog([]),{stop,no_domain,[]}),
@@ -90,15 +92,19 @@ domain(_Config) ->
ignore = logger_filters:domain(?dlog([a]),{stop,starts_with,[a,b]}),
ignore = logger_filters:domain(?dlog([a]),{log,equals,[a,b]}),
ignore = logger_filters:domain(?dlog([a]),{stop,equals,[a,b]}),
+ L5 = logger_filters:domain(L5=?dlog([a]),{log,differs,[a,b]}),
+ stop = logger_filters:domain(?dlog([a]),{stop,differs,[a,b]}),
ignore = logger_filters:domain(?dlog([a]),{log,no_domain,[a,b]}),
ignore = logger_filters:domain(?dlog([a]),{stop,no_domain,[a,b]}),
ignore = logger_filters:domain(?dlog([a,b]),{log,prefix_of,[a]}),
ignore = logger_filters:domain(?dlog([a,b]),{stop,prefix_of,[a]}),
- L5 = logger_filters:domain(L5=?dlog([a,b]),{log,starts_with,[a]}),
+ L6 = logger_filters:domain(L6=?dlog([a,b]),{log,starts_with,[a]}),
stop = logger_filters:domain(?dlog([a,b]),{stop,starts_with,[a]}),
ignore = logger_filters:domain(?dlog([a,b]),{log,equals,[a]}),
ignore = logger_filters:domain(?dlog([a,b]),{stop,equals,[a]}),
+ L7 = logger_filters:domain(L7=?dlog([a,b]),{log,differs,[a]}),
+ stop = logger_filters:domain(?dlog([a,b]),{stop,differs,[a]}),
ignore = logger_filters:domain(?dlog([a,b]),{log,no_domain,[a]}),
ignore = logger_filters:domain(?dlog([a,b]),{stop,no_domain,[a]}),
@@ -108,26 +114,33 @@ domain(_Config) ->
ignore = logger_filters:domain(?ndlog,{stop,starts_with,[a]}),
ignore = logger_filters:domain(?ndlog,{log,equals,[a]}),
ignore = logger_filters:domain(?ndlog,{stop,equals,[a]}),
- L6 = logger_filters:domain(L6=?ndlog,{log,no_domain,[a]}),
+ L8 = logger_filters:domain(L8=?ndlog,{log,differs,[a]}),
+ stop = logger_filters:domain(?ndlog,{stop,differs,[a]}),
+ L9 = logger_filters:domain(L9=?ndlog,{log,no_domain,[a]}),
stop = logger_filters:domain(?ndlog,{stop,no_domain,[a]}),
- L7 = logger_filters:domain(L7=?dlog([a,b,c,d]),{log,prefix_of,[a,b,c,d]}),
+ L10 = logger_filters:domain(L10=?dlog([a,b,c,d]),{log,prefix_of,[a,b,c,d]}),
stop = logger_filters:domain(?dlog([a,b,c,d]),{stop,prefix_of,[a,b,c,d]}),
- L8 = logger_filters:domain(L8=?dlog([a,b,c,d]),{log,starts_with,[a,b,c,d]}),
+ L11 = logger_filters:domain(L11=?dlog([a,b,c,d]),{log,starts_with,[a,b,c,d]}),
stop = logger_filters:domain(?dlog([a,b,c,d]),{stop,starts_with,[a,b,c,d]}),
- L9 = logger_filters:domain(L9=?dlog([a,b,c,d]),{log,equals,[a,b,c,d]}),
+ L12 = logger_filters:domain(L12=?dlog([a,b,c,d]),{log,equals,[a,b,c,d]}),
stop = logger_filters:domain(?dlog([a,b,c,d]),{stop,equals,[a,b,c,d]}),
+ ignore = logger_filters:domain(?dlog([a,b,c,d]),{log,differs,[a,b,c,d]}),
+ ignore = logger_filters:domain(?dlog([a,b,c,d]),{stop,differs,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog([a,b,c,d]),{log,no_domain,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog([a,b,c,d]),{stop,no_domain,[a,b,c,d]}),
%% A domain field in meta which is not a list is allowed by the
- %% filter, but it will never match.
+ %% filter, but since MatchDomain is always a list of atoms, only
+ %% Action=differs can ever match.
ignore = logger_filters:domain(?dlog(dummy),{log,prefix_of,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog(dummy),{stop,prefix_of,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog(dummy),{log,starts_with,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog(dummy),{stop,starts_with,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog(dummy),{log,equals,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog(dummy),{stop,equals,[a,b,c,d]}),
+ L13 = logger_filters:domain(L13=?dlog(dummy),{log,differs,[a,b,c,d]}),
+ stop = logger_filters:domain(?dlog(dummy),{stop,differs,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog(dummy),{log,no_domain,[a,b,c,d]}),
ignore = logger_filters:domain(?dlog(dummy),{stop,no_domain,[a,b,c,d]}),