コード例 #1
0
ファイル: TraceCfgParser.cs プロジェクト: arlm/apichange
        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()));
            }
        }
コード例 #2
0
ファイル: TraceCfgParser.cs プロジェクト: arlm/apichange
        /// <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();
            }
        }
コード例 #3
0
ファイル: TraceCfgParser.cs プロジェクト: arlm/apichange
        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;
            }
        }