|
1 | 1 | using System;
|
2 | 2 | using System.Collections.Generic;
|
| 3 | +using System.Diagnostics.CodeAnalysis; |
3 | 4 | using System.Linq;
|
4 | 5 |
|
5 | 6 | namespace dotnetCampus.Logging.Writers.Helpers;
|
@@ -109,54 +110,58 @@ internal bool IsTagEnabled(string text)
|
109 | 110 | /// <param name="args">命令行参数。</param>
|
110 | 111 | public static TagFilterManager? FromCommandLineArgs(string[] args)
|
111 | 112 | {
|
| 113 | + if (!TryGetCommandLineValue(args, LogTagParameterName, out var value)) |
| 114 | + { |
| 115 | + return null; |
| 116 | + } |
| 117 | + |
112 | 118 | HashSet<string> anyFilterTags = [];
|
113 | 119 | HashSet<string> includingFilterTags = [];
|
114 | 120 | HashSet<string> excludingFilterTags = [];
|
115 |
| - for (var i = 0; i < args.Length; i++) |
| 121 | + var filterTags = value.Split([',', ';', ' ']); |
| 122 | + foreach (var tag in filterTags) |
116 | 123 | {
|
117 |
| - if (args[i] != LogTagParameterName || i + 1 >= args.Length) |
118 |
| - { |
119 |
| - continue; |
120 |
| - } |
121 |
| - |
122 |
| - var filterTags = args[i + 1].Split([',', ';', ' ']); |
123 |
| - foreach (var tag in filterTags) |
| 124 | + if (tag.StartsWith("-", StringComparison.Ordinal)) |
124 | 125 | {
|
125 |
| - if (tag.StartsWith("-", StringComparison.Ordinal)) |
126 |
| - { |
127 | 126 | #if NET8_0_OR_GREATER
|
128 |
| - excludingFilterTags.Add(tag[1..]); |
| 127 | + excludingFilterTags.Add(tag[1..]); |
129 | 128 | #else
|
130 |
| - excludingFilterTags.Add(tag.Substring(1)); |
| 129 | + excludingFilterTags.Add(tag.Substring(1)); |
131 | 130 | #endif
|
132 |
| - } |
133 |
| - else if (tag.StartsWith("+", StringComparison.Ordinal)) |
134 |
| - { |
| 131 | + } |
| 132 | + else if (tag.StartsWith("+", StringComparison.Ordinal)) |
| 133 | + { |
135 | 134 | #if NET8_0_OR_GREATER
|
136 |
| - includingFilterTags.Add(tag[1..]); |
| 135 | + includingFilterTags.Add(tag[1..]); |
137 | 136 | #else
|
138 |
| - includingFilterTags.Add(tag.Substring(1)); |
| 137 | + includingFilterTags.Add(tag.Substring(1)); |
139 | 138 | #endif
|
140 |
| - } |
141 |
| - else |
142 |
| - { |
143 |
| - anyFilterTags.Add(tag); |
144 |
| - } |
145 | 139 | }
|
146 |
| - |
147 |
| - return new TagFilterManager |
| 140 | + else |
148 | 141 | {
|
149 |
| - AnyFilterTags = anyFilterTags.ToImmutableHashSet(), |
150 |
| - IncludingFilterTags = includingFilterTags.ToImmutableHashSet(), |
151 |
| - ExcludingFilterTags = excludingFilterTags.ToImmutableHashSet(), |
152 |
| - }; |
| 142 | + anyFilterTags.Add(tag); |
| 143 | + } |
153 | 144 | }
|
154 | 145 |
|
155 | 146 | return new TagFilterManager
|
156 | 147 | {
|
157 |
| - AnyFilterTags = [], |
158 |
| - IncludingFilterTags = [], |
159 |
| - ExcludingFilterTags = [], |
| 148 | + AnyFilterTags = anyFilterTags.ToImmutableHashSet(), |
| 149 | + IncludingFilterTags = includingFilterTags.ToImmutableHashSet(), |
| 150 | + ExcludingFilterTags = excludingFilterTags.ToImmutableHashSet(), |
160 | 151 | };
|
161 | 152 | }
|
| 153 | + |
| 154 | + private static bool TryGetCommandLineValue(string[] args, string parameterName, [NotNullWhen(true)] out string? value) |
| 155 | + { |
| 156 | + for (var i = 0; i < args.Length; i++) |
| 157 | + { |
| 158 | + if (string.Equals(args[i], parameterName, StringComparison.OrdinalIgnoreCase) && i + 1 < args.Length) |
| 159 | + { |
| 160 | + value = args[i + 1]; |
| 161 | + return true; |
| 162 | + } |
| 163 | + } |
| 164 | + value = null; |
| 165 | + return false; |
| 166 | + } |
162 | 167 | }
|
0 commit comments