public TraceFilter(string typeFilter, MessageTypes msgTypeFilter, Level levelFilter, TraceFilter next) { if (string.IsNullOrEmpty(typeFilter)) { throw new ArgumentException("typeFilter was null or empty"); } this.myFilter = typeFilter; this.Next = next; this.myMsgTypeFilter = msgTypeFilter; this.myLevelFilter = levelFilter; var parts = typeFilter.Trim().ToLower().Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries); this.myFilterHashes = new int[parts.Length]; Debug.Assert(parts.Length > 0, "Type filter parts should be > 0"); for (var i = 0; i < parts.Length; i++) { if (parts[i] == "*") { this.myFilterHashes[i] = MATCHANY; } else { this.myFilterHashes[i] = parts[i].GetHashCode(); } } }
internal TracerConfig(string cfg) { if (string.IsNullOrEmpty(cfg)) { return; } var source = new TraceSource(TraceEnvVarName, SourceLevels.All); this.myListeners = source.Listeners; var parser = new TraceCfgParser(cfg); var newListener = parser.OutDevice; this.myFilters = parser.Filters; this.myNotFilters = parser.NotFilters; if (newListener != null) { // when the App.config _Trace source should be used we do not replace // anything if (!parser.UseAppConfigListeners) { this.myListeners.Clear(); this.myListeners.Add(newListener); } } else { this.myListeners = null; } }
/// <summary> /// Format string is of the form /// outDevice; type flag1+flag2+...;type flags; ... /// where flags are a combination of trace markers /// </summary> /// <param name="config"></param> public TraceCfgParser(string config) { if (string.IsNullOrEmpty(config)) { return; } var parts = config.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Select(str => str.Trim()).ToArray(); foreach (var filter in this.GetFilters(parts, 1).Reverse()) { var typeName = filter.Key.TrimStart('!'); var bIsNotFilter = filter.Key.IndexOf('!') == 0; var levelAndMsgFilter = this.ParseMsgTypeFilter(filter.Value); var curFilterInstance = new TraceFilter(typeName, levelAndMsgFilter.Value, levelAndMsgFilter.Key, bIsNotFilter ? this.NotFilters : this.Filters); if (bIsNotFilter) { this.NotFilters = curFilterInstance; } else { this.Filters = curFilterInstance; } } if (parts.Length > 0) { this.OpenOutputDevice(parts[0].ToLower()); } // when only output device was configured or wrong mask was entere we enable full tracing // by default if (this.Filters == null) { this.Filters = new TraceFilterMatchAll(); } if (this.bHasError) { InternalError.PrintHelp(); } }