protected TestBase()

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;
	}