IEnumerable <KeyValuePair <string, string []> > GetFilters(string [] filters, int nSkip) { foreach (string current in filters.Skip(nSkip)) { string[] filterParts = current.Split(new char[] { '+', ' ' }, StringSplitOptions.RemoveEmptyEntries); if (filterParts.Length < 2) { bHasError = true; InternalError.Print("The configuration string {0} did have an unmatched type severity or level filter part: {0}", current); } yield return(new KeyValuePair <string, string []>(filterParts[0], filterParts.Skip(1).ToArray())); } }
/// <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; } string [] parts = config.Split(new char [] { ';' }, StringSplitOptions.RemoveEmptyEntries) .Select((str) => str.Trim()) .ToArray(); foreach (KeyValuePair <string, string []> filter in GetFilters(parts, 1).Reverse()) { string typeName = filter.Key.TrimStart(new char[] { '!' }); bool bIsNotFilter = filter.Key.IndexOf('!') == 0; KeyValuePair <Level, MessageTypes> levelAndMsgFilter = ParseMsgTypeFilter(filter.Value); TraceFilter curFilterInstance = new TraceFilter(typeName, levelAndMsgFilter.Value, levelAndMsgFilter.Key, bIsNotFilter ? NotFilters : Filters); if (bIsNotFilter) { NotFilters = curFilterInstance; } else { Filters = curFilterInstance; } } if (parts.Length > 0) { 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 (bHasError == true) { InternalError.PrintHelp(); } }
private void OpenOutputDevice(string outDevice) { string [] parts = outDevice.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); string deviceName = parts[0]; string deviceConfig = String.Join(" ", parts.Skip(1).ToArray()); switch (deviceName) { case "file": if (deviceConfig == "") { deviceConfig = DefaultTraceFileBaseName; } OutDevice = new TextWriterTraceListener(CreateTraceFile(deviceConfig)); break; case "debugoutput": OutDevice = new DefaultTraceListener(); break; case "console": OutDevice = new ConsoleTraceListener(); break; case "null": OutDevice = new NullTraceListener(); break; case "default": UseAppConfigListeners = true; OutDevice = new NullTraceListener(); break; default: InternalError.Print("The trace output device {0} is not supported.", outDevice); bHasError = true; break; } }