public static ILoggerFactory AddSplunk(this ILoggerFactory factory, SplunkConfiguration configuration)
        {
            ILoggerProvider provider = new SplunkLoggerProvider((n, l, e) => l >= configuration.MinLevel, configuration);

            factory.AddProvider(provider);

            return(factory);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        /// <param name="filter"></param>
        /// <param name="configuration"></param>
        public SplunkLogger(string name, Func <string, LogLevel, Exception, bool> filter, SplunkConfiguration configuration)
        {
            Filter             = filter ?? ((category, logLevel, exception) => true);
            this.configuration = configuration;
            this.name          = name;

            hecSender = new HttpEventCollectorSender(
                configuration.ServerUrl,                                                         // Splunk HEC URL
                configuration.Token,                                                             // Splunk HEC token *GUID*
                new HttpEventCollectorEventInfo.Metadata(null, null, "_json", GetMachineName()), // Metadata
                HttpEventCollectorSender.SendMode.Sequential,                                    // Sequential sending to keep message in order
                0,                                                                               // BatchInterval - Set to 0 to disable
                0,                                                                               // BatchSizeBytes - Set to 0 to disable
                0,                                                                               // BatchSizeCount - Set to 0 to disable
                new HttpEventCollectorResendMiddleware(configuration.RetriesOnError).Plugin      // Resend Middleware with retry
                );
        }
        public static ILoggerFactory AddSplunk(this ILoggerFactory factory, SplunkConfiguration configuration, string applicationName, string environmentName)
        {
            if (string.IsNullOrEmpty(applicationName))
            {
                throw new ArgumentNullException(nameof(applicationName));
            }

            if (string.IsNullOrEmpty(environmentName))
            {
                throw new ArgumentNullException(nameof(environmentName));
            }

            ILoggerProvider provider = new SplunkLoggerProvider((n, l, e) => l >= configuration.MinLevel, configuration);

            factory.AddProvider(provider);

            return(factory);
        }
        public static ILoggerFactory AddSplunk(this ILoggerFactory factory, Func <string, LogLevel, Exception, bool> filter, SplunkConfiguration configuration)
        {
            ILoggerProvider provider = new SplunkLoggerProvider(filter, configuration);

            factory.AddProvider(provider);

            return(factory);
        }
        public static ILoggerFactory AddSplunk(this ILoggerFactory factory, Func <string, LogLevel, Exception, bool> filter, SplunkConfiguration configuration, string applicationName, string environmentName)
        {
            if (string.IsNullOrEmpty(applicationName))
            {
                throw new ArgumentNullException(nameof(applicationName));
            }

            if (string.IsNullOrEmpty(environmentName))
            {
                throw new ArgumentNullException(nameof(environmentName));
            }

            ILoggerProvider provider = new SplunkLoggerProvider(filter, configuration);

            factory.AddProvider(provider);

            return(factory);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="filter"></param>
 /// <param name="configuration"></param>
 public SplunkLoggerProvider(Func <string, LogLevel, Exception, bool> filter, SplunkConfiguration configuration)
 {
     this.filter        = filter;
     this.configuration = configuration;
 }