private void InitializedOutputPlugins(Config config)
        {
            if (config.Output != null)
            {
                if (config.Output.StdOut != null)
                {
                    _outputPlugins.Add(new StdOutput(config.Output.StdOut.Condition));
                }

                if (config.Output.ApplicationInsights != null)
                {
                    var appInsightsConfig = config.Output.ApplicationInsights;
                    var traceConfig = appInsightsConfig.Trace == null ? null : new ApplicationInsightsOutput.AITraceConfig()
                    {
                        Condition = appInsightsConfig.Trace.Condition
                    };
                    var metricConfig = appInsightsConfig.Metric == null ? null : new ApplicationInsightsOutput.AIMetricConfig()
                    {
                        Condition = appInsightsConfig.Metric.Condition,
                        Name = appInsightsConfig.Metric.Name,
                        Value = appInsightsConfig.Metric.Value
                    };

                    _outputPlugins.Add(new ApplicationInsightsOutput(appInsightsConfig.InstrumentationKey, traceConfig, metricConfig));
                }
            }
        }
        private void InitializeFilterPlugins(Config config)
        {
            if (config.Filter != null)
            {
                var grokConfig = config.Filter.Grok;
                if (grokConfig != null)
                {
                    if (grokConfig.Match.Count != 2)
                    {
                        throw new Exception("Grok filter's match property must be an array with 2 elements. The first element is the path of the property to match, the second element is the grok pattern.");
                    }

                    _filterPlugins.Add(new GrokFilter(grokConfig.Match, grokConfig.Condition));
                }
            }
        }
        private void InitializeInputPlugins(Config config)
        {
            if (config.Input != null)
            {
                var stdinConfig = config.Input.Stdin;
                if (stdinConfig != null)
                {
                    _inputPlugins.Add(new StdInput(_messageQueue, stdinConfig.codec, stdinConfig.type));
                }

                var etwEventSourceConfig = config.Input.EtwEventSource;
                if (etwEventSourceConfig != null)
                {
                    _inputPlugins.Add(new EtwEventSourceInput(_messageQueue,
                        etwEventSourceConfig.providers, etwEventSourceConfig.codec, etwEventSourceConfig.type));
                }
            }
        }