Skip to content

Commit 4212e79

Browse files
authored
Merge pull request #20 from dotnet-campus/t/lvyi/order
解决顺序对标签过滤产生的影响
2 parents 6d0bf04 + bceacc6 commit 4212e79

File tree

2 files changed

+60
-11
lines changed

2 files changed

+60
-11
lines changed

src/dotnetCampus.Logger/Writers/Helpers/TagFilterManager.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,16 @@ internal bool IsTagEnabled(string text)
7575
}
7676
// 如果有任一标签,则匹配一个即可。
7777
任一满足 = 任一满足 || AnyFilterTags.Contains(tag);
78-
if (任一满足)
78+
// 如果有包含标签,则匹配一个,直到全部匹配。
79+
if (!包含满足 && IncludingFilterTags.Count > 0)
7980
{
80-
// 如果有包含标签,则匹配一个,直到全部匹配。
81-
if (!包含满足 && IncludingFilterTags.Count > 0)
81+
if (includingTags.Contains(tag))
8282
{
83-
if (includingTags.Contains(tag))
84-
{
85-
includingTags.Remove(tag);
86-
}
87-
if (includingTags.Count is 0)
88-
{
89-
包含满足 = true;
90-
}
83+
includingTags.Remove(tag);
84+
}
85+
if (includingTags.Count is 0)
86+
{
87+
包含满足 = true;
9188
}
9289
}
9390
}

tests/dotnetCampus.Logger.Tests/TagFilterManagerTests.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,32 @@ public void 单个任一和包含标签()
8484
Assert.IsFalse(filter.IsTagEnabled("[xxxx] Message"));
8585
}
8686

87+
[TestMethod("单个任一和包含标签,只要有一个标签匹配即允许。且标签顺序不影响。")]
88+
public void 单个任一和包含标签且标签顺序不影响()
89+
{
90+
var filter = CreateFilter("+Bar,Foo");
91+
Assert.IsFalse(filter.IsTagEnabled("[Foo] Message"));
92+
Assert.IsFalse(filter.IsTagEnabled("[Bar] Message"));
93+
Assert.IsTrue(filter.IsTagEnabled("[Foo][Bar] Message"));
94+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Foo] Message"));
95+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Bar] Message"));
96+
Assert.IsTrue(filter.IsTagEnabled("[xxxx][Foo][Bar] Message"));
97+
Assert.IsFalse(filter.IsTagEnabled("[xxxx] Message"));
98+
}
99+
100+
[TestMethod("单个任一和包含标签,只要有一个标签匹配即允许。且标签顺序不影响2。")]
101+
public void 单个任一和包含标签且标签顺序不影响2()
102+
{
103+
var filter = CreateFilter("+Foo,Bar");
104+
Assert.IsFalse(filter.IsTagEnabled("[Foo] Message"));
105+
Assert.IsFalse(filter.IsTagEnabled("[Bar] Message"));
106+
Assert.IsTrue(filter.IsTagEnabled("[Foo][Bar] Message"));
107+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Foo] Message"));
108+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Bar] Message"));
109+
Assert.IsTrue(filter.IsTagEnabled("[xxxx][Foo][Bar] Message"));
110+
Assert.IsFalse(filter.IsTagEnabled("[xxxx] Message"));
111+
}
112+
87113
[TestMethod("单个任一和排除标签,只要有一个标签匹配即不允许。")]
88114
public void 单个任一和排除标签()
89115
{
@@ -97,6 +123,19 @@ public void 单个任一和排除标签()
97123
Assert.IsFalse(filter.IsTagEnabled("[xxxx] Message"));
98124
}
99125

126+
[TestMethod("单个任一和排除标签,只要有一个标签匹配即不允许。且标签顺序不影响。")]
127+
public void 单个任一和排除标签且标签顺序不影响()
128+
{
129+
var filter = CreateFilter("-Bar,Foo");
130+
Assert.IsTrue(filter.IsTagEnabled("[Foo] Message"));
131+
Assert.IsFalse(filter.IsTagEnabled("[Bar] Message"));
132+
Assert.IsFalse(filter.IsTagEnabled("[Foo][Bar] Message"));
133+
Assert.IsTrue(filter.IsTagEnabled("[xxxx][Foo] Message"));
134+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Bar] Message"));
135+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Foo][Bar] Message"));
136+
Assert.IsFalse(filter.IsTagEnabled("[xxxx] Message"));
137+
}
138+
100139
[TestMethod("单个包含和排除标签,只要有一个标签匹配即不允许。")]
101140
public void 单个包含和排除标签()
102141
{
@@ -110,6 +149,19 @@ public void 单个包含和排除标签()
110149
Assert.IsFalse(filter.IsTagEnabled("[xxxx] Message"));
111150
}
112151

152+
[TestMethod("单个包含和排除标签,只要有一个标签匹配即不允许。且标签顺序不影响。")]
153+
public void 单个包含和排除标签且标签顺序不影响()
154+
{
155+
var filter = CreateFilter("-Bar,+Foo");
156+
Assert.IsTrue(filter.IsTagEnabled("[Foo] Message"));
157+
Assert.IsFalse(filter.IsTagEnabled("[Bar] Message"));
158+
Assert.IsFalse(filter.IsTagEnabled("[Foo][Bar] Message"));
159+
Assert.IsTrue(filter.IsTagEnabled("[xxxx][Foo] Message"));
160+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Bar] Message"));
161+
Assert.IsFalse(filter.IsTagEnabled("[xxxx][Foo][Bar] Message"));
162+
Assert.IsFalse(filter.IsTagEnabled("[xxxx] Message"));
163+
}
164+
113165
[TestMethod("单个任一和包含和排除标签,只要有一个排除标签匹配即不允许,否则只要有一个标签匹配即允许。")]
114166
public void 单个任一和包含和排除标签()
115167
{

0 commit comments

Comments
 (0)