tests-integration/Elastic.NLog.Targets.IntegrationTests/TestBase.cs (42 lines of code) (raw):

using System; using System.Linq; using System.Threading; using Elastic.Channels.Diagnostics; using Elastic.Clients.Elasticsearch; using Elastic.Elasticsearch.Xunit.XunitPlumbing; using Xunit.Abstractions; namespace NLog.Targets.Elastic.IntegrationTests; public abstract class TestBase : IClusterFixture<LoggingCluster> { protected ElasticsearchClient Client { get; } protected TestBase(LoggingCluster cluster, ITestOutputHelper output) => Client = cluster.CreateClient(output); protected IDisposable CreateLogger( out NLog.Logger logger, out NLog.LogFactory logFactory, out string @namespace, out WaitHandle waitHandle, out IChannelDiagnosticsListener listener, Action<NLog.Targets.ElasticsearchTarget> setupTarget ) { var slim = new CountdownEvent(1); waitHandle = slim.WaitHandle; @namespace = Guid.NewGuid().ToString("N").ToLowerInvariant().Substring(0, 6); logFactory = new NLog.LogFactory(); var logConfig = new NLog.Config.LoggingConfiguration(logFactory); var logTarget = new NLog.Targets.ElasticsearchTarget() { Name = "elastic" }; logTarget.DataStreamNamespace = @namespace; logTarget.OutboundBufferMaxSize = 1; logTarget.OutboundBufferMaxLifetimeSeconds = 1; logTarget.ExportMaxRetries = 0; logTarget.ExportMaxConcurrency = 1; logTarget.ConfigureChannel = (cfg) => cfg.BufferOptions.WaitHandle = slim; setupTarget?.Invoke(logTarget); logConfig.AddRuleForAllLevels(logTarget); logFactory.Configuration = logConfig; listener = logTarget.DiagnosticsListener; logger = logFactory.GetLogger("TestLogger"); return logFactory; } }