diff --git a/src/SplunkLogger/LoggerFactoryExtensions.cs b/src/SplunkLogger/LoggerFactoryExtensions.cs index 6631c25..e25caf8 100644 --- a/src/SplunkLogger/LoggerFactoryExtensions.cs +++ b/src/SplunkLogger/LoggerFactoryExtensions.cs @@ -2,6 +2,7 @@ using Splunk.Providers; using Splunk.Configurations; using System.Collections.Generic; +using System.Net.Http; namespace Splunk { @@ -18,11 +19,12 @@ public static class LoggerFactoryExtensions /// Logger factory. /// Configuration. /// Custom text formatter. - public static ILoggerFactory AddHECRawSplunkLogger(this ILoggerFactory loggerFactory, SplunkLoggerConfiguration configuration, ILoggerFormatter formatter = null) + /// The HTTP handler stack to use for sending requests. + public static ILoggerFactory AddHECRawSplunkLogger(this ILoggerFactory loggerFactory, SplunkLoggerConfiguration configuration, ILoggerFormatter formatter = null, HttpMessageHandler httpMessageHandler = null) { if (formatter == null) formatter = DefaultLoggerFormatter; - loggerFactory.AddProvider(new SplunkHECRawLoggerProvider(configuration, formatter)); + loggerFactory.AddProvider(new SplunkHECRawLoggerProvider(configuration, formatter, httpMessageHandler)); return loggerFactory; } @@ -32,11 +34,12 @@ public static ILoggerFactory AddHECRawSplunkLogger(this ILoggerFactory loggerFac /// Logger factory. /// Configuration. /// Custom text formatter. - public static ILoggerFactory AddHECJsonSplunkLogger(this ILoggerFactory loggerFactory, SplunkLoggerConfiguration configuration, ILoggerFormatter formatter = null) + /// The HTTP handler stack to use for sending requests. + public static ILoggerFactory AddHECJsonSplunkLogger(this ILoggerFactory loggerFactory, SplunkLoggerConfiguration configuration, ILoggerFormatter formatter = null, HttpMessageHandler httpMessageHandler = null) { if (formatter == null) formatter = DefaultLoggerFormatter; - loggerFactory.AddProvider(new SplunkHECJsonLoggerProvider(configuration, formatter)); + loggerFactory.AddProvider(new SplunkHECJsonLoggerProvider(configuration, formatter, httpMessageHandler)); return loggerFactory; } diff --git a/src/SplunkLogger/Providers/SplunkHECBaseProvider.cs b/src/SplunkLogger/Providers/SplunkHECBaseProvider.cs index f44db33..d2e45c1 100644 --- a/src/SplunkLogger/Providers/SplunkHECBaseProvider.cs +++ b/src/SplunkLogger/Providers/SplunkHECBaseProvider.cs @@ -18,9 +18,9 @@ public abstract class SplunkHECBaseProvider : ILoggerProvider protected ILogger loggerInstance; protected HttpClient httpClient; - public SplunkHECBaseProvider(SplunkLoggerConfiguration configuration, string endPointCustomization) + public SplunkHECBaseProvider(SplunkLoggerConfiguration configuration, string endPointCustomization, HttpMessageHandler httpMessageHandler = null) { - SetupHttpClient(configuration, endPointCustomization); + SetupHttpClient(configuration, endPointCustomization, httpMessageHandler); } /// @@ -41,9 +41,9 @@ public SplunkHECBaseProvider(SplunkLoggerConfiguration configuration, string end /// that the was occupying. public abstract void Dispose(); - void SetupHttpClient(SplunkLoggerConfiguration configuration, string endPointCustomization) + void SetupHttpClient(SplunkLoggerConfiguration configuration, string endPointCustomization, HttpMessageHandler httpMessageHandler) { - httpClient = new HttpClient + httpClient = new HttpClient(httpMessageHandler ?? new HttpClientHandler()) { BaseAddress = GetSplunkCollectorUrl(configuration, endPointCustomization) }; diff --git a/src/SplunkLogger/Providers/SplunkHECJsonLoggerProvider.cs b/src/SplunkLogger/Providers/SplunkHECJsonLoggerProvider.cs index e471fa5..61a8693 100644 --- a/src/SplunkLogger/Providers/SplunkHECJsonLoggerProvider.cs +++ b/src/SplunkLogger/Providers/SplunkHECJsonLoggerProvider.cs @@ -13,6 +13,7 @@ namespace Splunk.Providers /// /// This class is used to provide a Splunk HEC Json logger for each categoryName. /// + [ProviderAlias("Splunk")] public class SplunkHECJsonLoggerProvider : SplunkHECBaseProvider, ILoggerProvider { readonly BatchManager batchManager; @@ -24,8 +25,9 @@ public class SplunkHECJsonLoggerProvider : SplunkHECBaseProvider, ILoggerProvide /// /// Splunk configuration instance for HEC. /// Formatter instance. - public SplunkHECJsonLoggerProvider(SplunkLoggerConfiguration configuration, ILoggerFormatter loggerFormatter = null) - : base(configuration, "event") + /// The HTTP handler stack to use for sending requests. + public SplunkHECJsonLoggerProvider(SplunkLoggerConfiguration configuration, ILoggerFormatter loggerFormatter = null, HttpMessageHandler httpMessageHandler = null) + : base(configuration, "event", httpMessageHandler) { this.loggerFormatter = loggerFormatter; loggers = new ConcurrentDictionary(); diff --git a/src/SplunkLogger/Providers/SplunkHECRawLoggerProvider.cs b/src/SplunkLogger/Providers/SplunkHECRawLoggerProvider.cs index a465c40..f972415 100644 --- a/src/SplunkLogger/Providers/SplunkHECRawLoggerProvider.cs +++ b/src/SplunkLogger/Providers/SplunkHECRawLoggerProvider.cs @@ -12,6 +12,7 @@ namespace Splunk.Providers /// /// This class is used to provide a Splunk HEC Raw logger for each categoryName. /// + [ProviderAlias("Splunk")] public class SplunkHECRawLoggerProvider : SplunkHECBaseProvider, ILoggerProvider { readonly BatchManager batchManager; @@ -23,8 +24,9 @@ public class SplunkHECRawLoggerProvider : SplunkHECBaseProvider, ILoggerProvider /// /// Splunk configuration instance for HEC. /// Formatter instance. - public SplunkHECRawLoggerProvider(SplunkLoggerConfiguration configuration, ILoggerFormatter loggerFormatter = null) - :base(configuration, "raw") + /// The HTTP handler stack to use for sending requests. + public SplunkHECRawLoggerProvider(SplunkLoggerConfiguration configuration, ILoggerFormatter loggerFormatter = null, HttpMessageHandler httpMessageHandler = null) + :base(configuration, "raw", httpMessageHandler) { this.loggerFormatter = loggerFormatter; loggers = new ConcurrentDictionary(); diff --git a/src/SplunkLogger/Providers/SplunkTcpLoggerProvider.cs b/src/SplunkLogger/Providers/SplunkTcpLoggerProvider.cs index d49a94e..33f64ce 100644 --- a/src/SplunkLogger/Providers/SplunkTcpLoggerProvider.cs +++ b/src/SplunkLogger/Providers/SplunkTcpLoggerProvider.cs @@ -9,6 +9,7 @@ namespace Splunk.Providers /// /// This class is used to provide a Splunk Socket Tcp logger for each categoryName. /// + [ProviderAlias("Splunk")] public class SplunkTcpLoggerProvider : ILoggerProvider { readonly ILoggerFormatter loggerFormatter; diff --git a/src/SplunkLogger/Providers/SplunkUdpLoggerProvider.cs b/src/SplunkLogger/Providers/SplunkUdpLoggerProvider.cs index f11702d..81cce19 100644 --- a/src/SplunkLogger/Providers/SplunkUdpLoggerProvider.cs +++ b/src/SplunkLogger/Providers/SplunkUdpLoggerProvider.cs @@ -9,6 +9,7 @@ namespace Splunk.Providers /// /// This class is used to provide a Splunk Socket Udp logger for each categoryName. /// + [ProviderAlias("Splunk")] public class SplunkUdpLoggerProvider : ILoggerProvider { readonly ILoggerFormatter loggerFormatter;