in tests-integration/Elastic.Extensions.Logging.IntegrationTests/TestBase.cs [18:61]
protected TestBase(LoggingCluster cluster, ITestOutputHelper output) =>
Client = cluster.CreateClient(output);
protected IDisposable CreateLogger(
out ILogger logger,
out ElasticsearchLoggerProvider provider,
out string @namespace,
out WaitHandle waitHandle,
out IChannelDiagnosticsListener listener,
Action<ElasticsearchLoggerOptions, string> setupLogger
)
{
@namespace = Guid.NewGuid().ToString("N").ToLowerInvariant().Substring(0, 6);
var slim = new CountdownEvent(1);
waitHandle = slim.WaitHandle;
var s = @namespace;
var options = new ConfigureOptions<ElasticsearchLoggerOptions>(o => setupLogger(o, s));
var channelSetup = new IChannelSetup[]
{
new ChannelSetup(c =>
{
c.BufferOptions.WaitHandle = slim;
c.BufferOptions.OutboundBufferMaxSize = 1;
c.BufferOptions.OutboundBufferMaxLifetime = TimeSpan.FromSeconds(1);
c.BufferOptions.ExportMaxRetries = 0;
c.BufferOptions.ExportMaxConcurrency = 1;
})
};
var optionsFactory = new OptionsFactory<ElasticsearchLoggerOptions>(
new[] { options }, Enumerable.Empty<IPostConfigureOptions<ElasticsearchLoggerOptions>>());
var optionsMonitor = new OptionsMonitor<ElasticsearchLoggerOptions>(
optionsFactory, Enumerable.Empty<IOptionsChangeTokenSource<ElasticsearchLoggerOptions>>(),
new OptionsCache<ElasticsearchLoggerOptions>());
provider = new ElasticsearchLoggerProvider(optionsMonitor, channelSetup);
var loggerFactory = new LoggerFactory(
new[] { provider },
new LoggerFilterOptions { MinLevel = LogLevel.Information }
);
logger = loggerFactory.CreateLogger<ElasticsearchLogger>();
listener = provider.DiagnosticsListener;
return loggerFactory;
}